diff --git a/.github/workflows/build-ui.yml b/.github/workflows/build-ui.yml
index ae50938f8e0..7fc170d16b3 100644
--- a/.github/workflows/build-ui.yml
+++ b/.github/workflows/build-ui.yml
@@ -58,6 +58,8 @@ jobs:
run: |
dotnet publish src/UI/UI.csproj -c ${{ inputs.build_configuration }} -r win-x64 --self-contained true `
-p:PublishSingleFile=true `
+ -p:DebugSymbols=false `
+ -p:DebugType=none `
-o ./publish/windows-x64
Copy-Item "libmpv-temp/libmpv-2.dll" "./publish/windows-x64/"
@@ -65,13 +67,10 @@ jobs:
run: |
dotnet publish src/UI/UI.csproj -c ${{ inputs.build_configuration }} -r win-arm64 --self-contained true `
-p:PublishSingleFile=true `
+ -p:DebugSymbols=false `
+ -p:DebugType=none `
-o ./publish/windows-arm64
- - name: Remove PDB files
- run: |
- Get-ChildItem -Path "./publish/windows-x64/" -Recurse -Include *.pdb | Remove-Item -Force
- Get-ChildItem -Path "./publish/windows-arm64/" -Recurse -Include *.pdb | Remove-Item -Force
-
# - name: Setup WiX
# run: |
# dotnet tool install --global wix --version 5.0.1
@@ -104,9 +103,10 @@ jobs:
run: |
dotnet publish src/UI/UI.csproj -c ${{ inputs.build_configuration }} -r win-x64 --self-contained false `
-p:PublishSingleFile=true `
+ -p:DebugSymbols=false `
+ -p:DebugType=none `
-o ./src/UI/bin/Release/net10.0/publish
Copy-Item "libmpv-temp/libmpv-2.dll" "./src/UI/bin/Release/net10.0/publish/"
- Get-ChildItem -Path "./src/UI/bin/Release/net10.0/publish/" -Recurse -Include *.pdb | Remove-Item -Force
- name: Install Inno Setup
run: choco install innosetup -y --no-progress
@@ -289,11 +289,10 @@ jobs:
run: |
dotnet publish src/UI/UI.csproj -c ${{ inputs.build_configuration }} -r osx-x64 --self-contained true \
-p:PublishSingleFile=true \
+ -p:DebugSymbols=false \
+ -p:DebugType=none \
-o ./publish/macos-x64
-
- # Remove PDB files immediately
- find "./publish/macos-x64/" -name "*.pdb" -type f -delete
-
+
echo "Disk space after x64 publish:"; df -h /
- name: Update Info.plist with version from Se.cs
@@ -372,11 +371,10 @@ jobs:
dotnet publish src/UI/UI.csproj -c ${{ inputs.build_configuration }} -r osx-arm64 --self-contained true \
-p:PublishSingleFile=true \
+ -p:DebugSymbols=false \
+ -p:DebugType=none \
-o ./publish/macos-arm64
-
- # Remove PDB files immediately
- find "./publish/macos-arm64/" -name "*.pdb" -type f -delete
-
+
echo "Disk space after ARM64 publish:"; df -h /
- name: Create, sign, and package ARM64 DMG
@@ -526,12 +524,10 @@ jobs:
run: |
dotnet publish src/UI/UI.csproj -c ${{ inputs.build_configuration }} -r linux-x64 --self-contained true \
-p:PublishSingleFile=true \
+ -p:DebugSymbols=false \
+ -p:DebugType=none \
-o ./publish/linux-x64
- - name: Remove PDB files from Linux artifacts
- run: |
- find "./publish/linux-x64/" -name "*.pdb" -type f -delete
-
- name: Create Linux TAR package
run: |
cd ./publish/linux-x64 && tar -czf ../../SubtitleEdit-Linux-x64.tar.gz . && cd ../..
@@ -548,36 +544,36 @@ jobs:
name: linux-tar-package
path: ./SubtitleEdit-Linux-x64.tar.gz
- build-linux-flatpak:
- runs-on: ubuntu-latest
- container:
- image: ghcr.io/flathub-infra/flatpak-github-actions:freedesktop-24.08
- options: --privileged
-
- steps:
- - uses: actions/checkout@v5
-
- - name: Update metainfo version/date from Se.cs
- run: bash installer/flatpak/update-metainfo-version.sh
-
- - name: Build flatpak bundle
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
- with:
- bundle: SubtitleEdit-linux-x64.flatpak
- manifest-path: installer/flatpak/dk.nikse.subtitleedit.yaml
- cache-key: flatpak-builder-${{ hashFiles('installer/flatpak/dk.nikse.subtitleedit.yaml', 'installer/flatpak/nuget-sources.json') }}
- arch: x86_64
-
- - name: Upload flatpak bundle artifact
- uses: actions/upload-artifact@v5
- with:
- name: flatpak-bundle
- path: SubtitleEdit-linux-x64.flatpak
- overwrite: true
+ # build-linux-flatpak:
+ # runs-on: ubuntu-latest
+ # container:
+ # image: ghcr.io/flathub-infra/flatpak-github-actions:freedesktop-24.08
+ # options: --privileged
+
+ # steps:
+ # - uses: actions/checkout@v5
+
+ # - name: Update metainfo version/date from Se.cs
+ # run: bash installer/flatpak/update-metainfo-version.sh
+
+ # - name: Build flatpak bundle
+ # uses: flatpak/flatpak-github-actions/flatpak-builder@v6
+ # with:
+ # bundle: SubtitleEdit-linux-x64.flatpak
+ # manifest-path: installer/flatpak/dk.nikse.subtitleedit.yaml
+ # cache-key: flatpak-builder-${{ hashFiles('installer/flatpak/dk.nikse.subtitleedit.yaml', 'installer/flatpak/nuget-sources.json') }}
+ # arch: x86_64
+
+ # - name: Upload flatpak bundle artifact
+ # uses: actions/upload-artifact@v5
+ # with:
+ # name: flatpak-bundle
+ # path: SubtitleEdit-linux-x64.flatpak
+ # overwrite: true
create-release:
if: ${{ inputs.create_release }}
- needs: [build-windows, build-macos, build-linux, build-linux-flatpak]
+ needs: [build-windows, build-macos, build-linux]
runs-on: ubuntu-latest
permissions:
contents: write
@@ -589,7 +585,7 @@ jobs:
id: tag
run: |
if [ -n "${{ inputs.release_tag }}" ]; then
- echo "tag=${{ inputs.release_tag }}" >> $GITHUB_OUTPUT
+ echo "tag=$(echo '${{ inputs.release_tag }}' | xargs)" >> $GITHUB_OUTPUT
else
timestamp=$(date +"%Y%m%d-%H%M%S")
echo "tag=pre-release-${timestamp}" >> $GITHUB_OUTPUT
@@ -610,7 +606,7 @@ jobs:
cp ./artifacts/windows-zip-packages/*.zip ./release-assets/
cp ./artifacts/macos-dmg-packages/*.dmg ./release-assets/
cp ./artifacts/linux-tar-package/*.tar.gz ./release-assets/
- cp ./artifacts/flatpak-bundle/*.flatpak ./release-assets/
+ #cp ./artifacts/flatpak-bundle/*.flatpak ./release-assets/
# List all files that will be uploaded
echo "Release assets:"
@@ -639,7 +635,7 @@ jobs:
- **macOS ARM64 (Apple Silicon - M1/M2/M3/M4 architecture):** [SubtitleEdit-macOS-ARM64.dmg](https://github.com/${{ github.repository }}/releases/download/${{ steps.tag.outputs.tag }}/SubtitleEdit-macOS-ARM64.dmg)
- **macOS x64 (Intel 64-bit):** [SubtitleEdit-macOS-x64.dmg](https://github.com/${{ github.repository }}/releases/download/${{ steps.tag.outputs.tag }}/SubtitleEdit-macOS-x64.dmg)
- **Linux x64 (tarball):** [SubtitleEdit-Linux-x64.tar.gz](https://github.com/${{ github.repository }}/releases/download/${{ steps.tag.outputs.tag }}/SubtitleEdit-Linux-x64.tar.gz)
- - **Linux x64 (Flatpak):** [SubtitleEdit-linux-x64.flatpak](https://github.com/${{ github.repository }}/releases/download/${{ steps.tag.outputs.tag }}/SubtitleEdit-linux-x64.flatpak)
+ #- **Linux x64 (Flatpak):** [SubtitleEdit-linux-x64.flatpak](https://github.com/${{ github.repository }}/releases/download/${{ steps.tag.outputs.tag }}/SubtitleEdit-linux-x64.flatpak)
### Installation
1. Read and fix requirements, please see [System Requirements](https://github.com/niksedk/subtitleedit-avalonia#system-requirements)
@@ -660,4 +656,4 @@ jobs:
./release-assets/SubtitleEdit-macOS-ARM64.dmg
./release-assets/SubtitleEdit-macOS-x64.dmg
./release-assets/SubtitleEdit-Linux-x64.tar.gz
- ./release-assets/SubtitleEdit-linux-x64.flatpak
+ #./release-assets/SubtitleEdit-linux-x64.flatpak
diff --git a/ChangeLog.txt b/ChangeLog.txt
index c575767948f..cd15057b047 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -2,7 +2,25 @@
Subtitle Edit Changelog
-v5.0.0-beta13 (xth April 2026)
+v5.0.0-beta14 (8th April 2026)
+
+* Add Romanian translation - thx zildan
+* Update Italian translation - thx bovirus
+* Update Portuguese (Brazil) translation - thx igorruckert
+* Fix click on libmpv-wid to toggle play/pause - thx vsemozhetbyt
+* VLC now shows subtitle
+* Fix italic in text box for edit image ocr db
+* Fix for mpv refresh for full screeen player
+* Fix: Allow large text files in batch-convert - thx phannhanhn201
+* Add toggle select sub while playing to video menu (+shortcut) - thx vsemozhetbyt
+* Add "Extend only" to adjust durations - thx Dravic
+* Fix for nOCR load - thx HellbringerOnline
+* Fix for nOCR expanded view - thx HellbringerOnline
+* Fix toolbar separator visibility not updating when setting changes - thx ivandrofly
+
+-----------------------------------------------------------------------------------------------------
+
+v5.0.0-beta13 (2nd April 2026)
* Add Turkish translation - thx Hayri
* Update Italian translation - thx bovirus
diff --git a/Dictionaries/hrv_OCRFixReplaceList.xml b/Dictionaries/hrv_OCRFixReplaceList.xml
index 6d626f6c04e..0f4962e758b 100644
--- a/Dictionaries/hrv_OCRFixReplaceList.xml
+++ b/Dictionaries/hrv_OCRFixReplaceList.xml
@@ -88,6 +88,7 @@
+
@@ -1220,6 +1221,7 @@
+
@@ -1502,6 +1504,7 @@
+
@@ -1645,6 +1648,7 @@
+
@@ -2168,6 +2172,7 @@
+
@@ -2182,6 +2187,7 @@
+
@@ -2287,7 +2293,11 @@
+
+
+
+
@@ -2386,6 +2396,7 @@
+
@@ -2440,6 +2451,7 @@
+
@@ -2488,6 +2500,7 @@
+
@@ -2698,6 +2711,7 @@
+
@@ -2720,6 +2734,7 @@
+
@@ -3156,6 +3171,7 @@
+
@@ -4346,6 +4362,7 @@
+
@@ -5612,6 +5629,7 @@
+
diff --git a/docs/overview.md b/docs/overview.md
index 8b5b48b0ef6..b1b84fa66cb 100644
--- a/docs/overview.md
+++ b/docs/overview.md
@@ -33,12 +33,31 @@ Subtitle Edit is a free, open-source editor for video subtitles. It allows you t
## Getting Started
-1. Download and install Subtitle Edit
-2. Open a video file via **Video → Open video file...**
-3. Open or create a subtitle file via **File → Open** or **File → New**
-4. Edit subtitles in the text editor and subtitle grid
-5. Use the waveform to visually adjust timing
-6. Save your work via **File → Save**
+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.
+
+2. **Open a video file**
+ Go to **Video → Open video file...** and select your video.
+ This allows you to preview and sync subtitles accurately.
+
+3. **Open, create, or generate a subtitle file**
+ - Open an existing file via **File → Open**
+ - Create a new one via **File → New**
+ - Or generate subtitles automatically using **speech-to-text** (**Video → Speech to text**)
+
+4. **Edit your subtitles**
+ Use the subtitle grid and text editor to:
+ - Adjust text
+ - Split or merge lines
+ - Fine-tune timing
+
+5. **Adjust timing visually**
+ Use the waveform display to precisely sync subtitles with audio.
+
+6. **Save your work**
+ Go to **File → Save** (or press **Ctrl+S**) to save your subtitle file.

diff --git a/docs/screenshots/assa-apply-advanced-effects.png b/docs/screenshots/assa-apply-advanced-effects.png
new file mode 100644
index 00000000000..f1438583715
Binary files /dev/null and b/docs/screenshots/assa-apply-advanced-effects.png differ
diff --git a/installer/flatpak/dk.nikse.subtitleedit.yaml b/installer/flatpak/dk.nikse.subtitleedit.yaml
index ad6ed5d0cec..9359737c683 100644
--- a/installer/flatpak/dk.nikse.subtitleedit.yaml
+++ b/installer/flatpak/dk.nikse.subtitleedit.yaml
@@ -10,6 +10,7 @@ command: SubtitleEdit
build-options:
append-path: /usr/lib/sdk/dotnet10/bin
append-ld-library-path: /usr/lib/sdk/dotnet10/lib
+ no-debuginfo: true
env:
PKG_CONFIG_PATH: /app/lib/pkgconfig:/app/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig:/usr/lib/sdk/dotnet10/lib/pkgconfig
@@ -264,6 +265,8 @@ modules:
--self-contained true \
-p:PublishSingleFile=true \
-p:RestoreLockedMode=false \
+ -p:DebugSymbols=false \
+ -p:DebugType=none \
--source /run/build/subtitleedit/nuget-sources \
-o /app/bin
diff --git a/src/UI/Assets/HunspellDictionaries.json b/src/UI/Assets/HunspellDictionaries.json
index e11608be226..e46d597afcd 100644
--- a/src/UI/Assets/HunspellDictionaries.json
+++ b/src/UI/Assets/HunspellDictionaries.json
@@ -242,8 +242,8 @@
{
"EnglishName": "Polish",
"NativeName": "polski",
- "DownloadLink": "https://github.com/SubtitleEdit/support-files/raw/master/hunspell/pl_PL.zip",
- "Description": "Polish by https://sjp.pl - 2020-07-18"
+ "DownloadLink": "https://github.com/SubtitleEdit/support-files/releases/download/hunspell/pl_PL_2026-04-01.zip",
+ "Description": "Polish by https://sjp.pl - 2026-04-01"
},
{
"EnglishName": "Portuguese (Brazilian) - Libreoffice",
diff --git a/src/UI/Assets/Languages/Danish.json b/src/UI/Assets/Languages/Danish.json
index c1e8c34e267..f57279a2715 100644
--- a/src/UI/Assets/Languages/Danish.json
+++ b/src/UI/Assets/Languages/Danish.json
@@ -310,6 +310,7 @@
"NewDotDotDot": "Ny...",
"NewProfile": "Ny profil",
"NewSubtitleStartKeyDownSetEndKeyUp": "Indsæt undertekst: Start på tast ned, sæt ende på tast op",
+ "SetSubtitleStartAtVideoPositionSetEndAtKeyUpAndGoToNext": "Indstil start ved videoposition sæt ende på tasten op, og gå til næste",
"No": "Ingen",
"NoFilesToConvert": "Ingen filer at konvertere",
"NoLanguageCode": "Ingen sprogkode",
@@ -643,7 +644,17 @@
"CopyToClipboard": "Kopiér til udklipsholder",
"PlayCurrent": "Spil aktuel",
"LeftMargin": "Venstre margin",
- "RightMargin": "Højre margin"
+ "RightMargin": "Højre margin",
+ "Installed": "Installeret",
+ "AdvancedDotDotDot": "Avanceret...",
+ "ChooseAlignment": "Vælg justering",
+ "MaxWidthPixels": "Maks. bredde (pixels)",
+ "SampleText": "Eksempel tekst",
+ "BoxWidthPixels": "Boksbredde (pixels)",
+ "FadeInOut": "Fade ind/ud",
+ "Alpha": "Alfa",
+ "PickResolution": "Vælg opløsning",
+ "ManualSync": "Manuel synkronisering"
},
"Main": {
"AudioTrackIsNowX": "Lydsporet er nu \"{0}",
@@ -843,6 +854,7 @@
"HelpTitle": "Hjælp",
"Help": "Hjælp...",
"About": "Om...",
+ "CheckForUpdates": "_Check opdateringer...",
"FixRightToLeftViaUnicodeControlCharacters": "Ret RTL via Unicode-kontroltegn (udvalgte linjer)",
"RemoveUnicodeControlCharacters": "Fjern Unicode-kontroltegn (udvalgte linjer)",
"ReverseRightToLeftStartEnd": "Omvendt RTL start/slut (udvalgte linjer)",
@@ -1138,6 +1150,8 @@
"LengthLessThan": "Længde <",
"LengthGreaterThan": "Længde >",
"PixelLengthGreaterThan": "Pixellængde >",
+ "GapLessThan": "Gab i ms <",
+ "GapGreaterThan": "Gab i ms >",
"ExactlyOneLine": "Præcis én linje",
"ExactlyTwoLines": "Præcis to linjer",
"MoreThanTwoLines": "Mere end to linjer",
@@ -1159,7 +1173,11 @@
"ExportReplaceRules": "Eksportregler",
"AppliedRules": "Anvendte regler",
"FindRule": "Find regel",
- "XLinesAffected": "{0:#,##0} linjer påvirket"
+ "XLinesAffected": "{0:#,##0} linjer påvirket",
+ "DeleteCategoryConfirm": "Vil du slette kategorien '{0}'?",
+ "DeleteRuleConfirm": "Vil du slette reglen '{0}'?",
+ "FindWhat": "Find hvad",
+ "DescriptionOptional": "Beskrivelse (valgfrit)"
},
"Find": {
"SearchTextWatermark": "Søg tekst...",
@@ -1304,7 +1322,9 @@
"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}"
+ "FixCommonOcrErrorsStep2FixesFoundX": "Ret almindelige fejl, trin 2 - Rettelser fundet: {0}",
+ "Action": "Handling",
+ "ApplySelectedFixes": "Anvend valgte rettelser"
},
"AdjustDurations": {
"Title": "Adjust durations",
@@ -1391,7 +1411,14 @@
"EditStyles": "Rediger stilarter",
"EditProperties": "Rediger egenskaber",
"EditAttachments": "Rediger vedhæftede filer",
- "ErrorsExportedX": "Fejl eksporteret: {0}"
+ "ErrorsExportedX": "Fejl eksporteret: {0}",
+ "SlowFontSizeChange": "Langsom ændring af skriftstørrelse",
+ "IncreaseFontKerning": "Forøg skrifttype-kernening",
+ "ScrollUp": "Rul op",
+ "ScrollDown": "Rul ned",
+ "RotateIn": "Roter ind",
+ "TiltBounce": "Tilt bounce",
+ "FontSizeBounceIn": "Skriftstørrelse hopper ind"
},
"ChangeCasing": {
"Title": "Change casing",
@@ -1441,7 +1468,9 @@
},
"MergeShortLines": {
"Title": "Flet korte linjer",
- "HighlightParts": "Fremhæv dele (karaoke)"
+ "HighlightParts": "Fremhæv dele (karaoke)",
+ "MergedLineInfo": "Flettede linje {0} til {1} - {2}",
+ "LinesMergedX": "Linjer flettet: {0}"
},
"MergeLinesWithSameText": {
"Title": "Flet linjer med samme tekst",
@@ -1459,7 +1488,23 @@
"NothingToReport": "Ingen problemer fundet.",
"SaveNetflixQualityReport": "Gem Netflix kvalitetsrapport",
"NetflixReportSaved": "Netflix kvalitetsrapport gemt",
- "NetFlixQualityReportSavedToX": "Netflix kvalitetsrapport gemt til:\r\n\r\n{0}"
+ "NetFlixQualityReportSavedToX": "Netflix kvalitetsrapport gemt til:\r\n\r\n{0}",
+ "DialogHyphenSpace": "Dialog bindestreg mellemrum",
+ "EllipsesNotThreeDots": "Brug elipser (ikke tre prikker)",
+ "OnlyAllowedGlyphs": "Kun tilladte glyffer",
+ "Italics": "Kursiv",
+ "MaxCharsSec": "Max tegn/sek",
+ "MaxDuration": "Max varighed",
+ "MaxLineLength": "Max linjelængde",
+ "MinDuration": "Min varighed",
+ "MaxNumberOfLines": "Max antal linjer",
+ "OneToTenSpellOut": "En til ti staves ud",
+ "ShotChanges": "Skudskifter",
+ "StartNumberSpellOut": "Startnummer udskrives",
+ "TextforHiUseBrackets": "Tekst til HI, brug parenteser",
+ "FrameRate": "Billedhastighed",
+ "TwoFrameGrap": "Mellemrum i to rammer",
+ "WhiteSpace": "Hvidt rum"
},
"ImageBasedEdit": {
"EditImagedBaseSubtitle": "Rediger billedbaseret undertekst",
@@ -1484,6 +1529,24 @@
"ResizeImages": "Ændre størrelse på billeder",
"Percentage": "Procent",
"ResizeImagesInfo": "Indtast procentdelen for at ændre størrelse på billeder.\r\n\r\nForhåndsvisning af opdateringer automatisk."
+ },
+ "RemoveTextForHearingImpaired": {
+ "Title": "Fjern tekst for hørehæmmede",
+ "Interjections": "Interjektioner",
+ "SkipIfStartWith": "Spring over hvis start med",
+ "RemoveTextBetween": "Fjern tekst mellem",
+ "Brackets": "Firkant",
+ "CurlyBrackets": "Krøllede ",
+ "Parentheses": "Parenteser",
+ "And": "og",
+ "OnlySeparateLines": "Kun separate linjer",
+ "RemoveTextBeforeColon": "Fjern tekst før kolon",
+ "OnlyIfTextIsUppercase": "Kun hvis teksten er med store bogstaver",
+ "OnlyOnSeparateLine": "Kun på separat linje",
+ "IfLineIsUppercase": "Hvis stregen er stor",
+ "IfLineContains": "Hvis linje indeholder",
+ "IfLineOnlyContainsMusicSymbols": "Hvis linje kun indeholder musiksymboler",
+ "RemoveInterjections": "Fjern interjektioner"
}
},
"SpellCheck": {
@@ -1537,6 +1600,8 @@
"AddCurrentSubtitle": "Tilføj aktuel undertekst",
"TitleOrLanguage": "Titel/sprog",
"ViewMatroskaTrackX": "Se Matroska-spor - {0}",
+ "ResolutionSeparator": "x",
+ "OpenFromUrlTitle": "Åbn videofil fra URL",
"BurnIn": {
"Title": "Generer video med indbrændte undertekster",
"InfoAssaOff": "Bemærk: Avanceret SubStation Alpha-styling understøttes.",
@@ -1579,7 +1644,8 @@
"OutputProperties": "Outputegenskaber...",
"VideoFileSize": "Video filstørrelse",
"OneBox": "Én kasse",
- "BoxPerLine": "Æske pr linje"
+ "BoxPerLine": "Æske pr linje",
+ "LogoInfo": "Vælg et PNG-billede, og træk det for at placere det på videoen."
},
"VideoTransparent": {
"Title": "Generate transparent video with subtitles",
@@ -1604,7 +1670,15 @@
"SelectModel": "Vælg model",
"ViewWhisperLogFile": "Se Whisper-logfil",
"ReDownloadX": "Gendownload {0}",
- "DownloadingSpeechToTextModel": "Downloader tale-til-tekst-model"
+ "DownloadingSpeechToTextModel": "Downloader tale-til-tekst-model",
+ "WhisperPostProcessingTitle": "Whisper efterbehandling",
+ "AdjustTimings": "Juster tider",
+ "MergeShortLines": "Flet korte linjer",
+ "BreakSplitLongLines": "Bryd/split lange linjer",
+ "FixShortDuration": "Fix kort varighed",
+ "FixCasing": "Reparer store/små bogstaver",
+ "AddPeriods": "Tilføj perioder",
+ "ChangeUnderlineToColor": "Skift understregning til farve"
},
"TextToSpeech": {
"Title": "Tekst til tale",
@@ -1628,7 +1702,32 @@
"RegenerateAudio": "Gendan lyd",
"AutoContinuePlaying": "Fortsæt automatisk med at spille",
"AddingAudioToVideoFileDotDotDot": "Tilføjer lyd til videofil...",
- "PreparingMergeDotDotDot": "Forbereder fletning..."
+ "PreparingMergeDotDotDot": "Forbereder fletning...",
+ "ImportVoiceDotDotDot": "Importer stemme...",
+ "VoiceImportSuccessTitle": "Stemme importeret",
+ "VoiceXImported": "Stemmen '{0}' blev importeret",
+ "AdvancedTtsSettings": "Avancerede TTS-indstillinger",
+ "ProAudioPostProcessing": "Pro lyd efterbehandling",
+ "ProAudioPostProcessingDescription": "Anvender EQ-varme, noise gate, kompression, loudness-normalisering (-16 LUFS) og fade ind/ud til hvert segment.",
+ "AudioDucking": "Audio ducking",
+ "AudioDuckingDescription": "Reducerer den originale videolydstyrke og blander den med TTS-lyden, så det originale lydspor stadig er svagt hørbart.",
+ "OriginalVolumePercent": "Original volumen %",
+ "VadSilenceCompression": "VAD silence komprimering",
+ "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.",
+ "MaxSilenceMs": "Maksimal stilhed (ms)",
+ "HighQualityTimeStretch": "Tidsstrækning af høj kvalitet (WSOLA/gummibånd)",
+ "HighQualityTimeStretchDescription": "Bruger gummibåndsalgoritmen (WSOLA) i stedet for standard atempo-filteret til tonehøjdebevarende hastighedsændringer.\r\nProducerer mere naturligt lydende tale, især ved højere hastighedsfaktorer.\r\nKræver librubberband i din FFmpeg-build — falder automatisk tilbage til atempo, hvis den ikke er tilgængelig.",
+ "SilencePaddingMs": "Silence polstring (ms)",
+ "SilencePaddingMsDescription": "Tilføjer en kort stilhed i slutningen af hvert segment.\r\nNyttig til at puste plads mellem sætninger.",
+ "OutputSampleRate": "Output sample rate (0 = standard)",
+ "OutputSampleRateDescription": "Gensampler alle segmenter til den angivne samplingsfrekvens (f.eks. 44100, 48000).\r\nIndstil til 0 for at beholde den oprindelige hastighed.",
+ "EdgeTtsRate": "Edge-TTS rate",
+ "EdgeTtsRateDescription": "Talehastighed for Edge-TTS, f.eks.\r\n\"+50%\", \"-30%\" eller \"+0%\" som standard.",
+ "EdgeTtsPitch": "Edge-TTS tonehøjde",
+ "EdgeTtsPitchDescription": "Pitch justering for Edge-TTS, f.eks.\r\n\"+10Hz\", \"-5Hz\" eller \"+0Hz\" som standard.",
+ "EdgeTtsVolume": "Edge-TTS volumen",
+ "EdgeTtsVolumeDescription": "Lydstyrkejustering til Edge-TTS, f.eks.\r\n\"+20%\", \"-10%\" eller \"+0%\" som standard.",
+ "DownloadPiperPrompt": "\"Tekst til tale\" kræver Piper.\r\n\r\nVil du downloade og bruge Piper?"
},
"ShotChanges": {
"TitleGenerateOrImport": "Generer/importér skudændringer",
@@ -1715,7 +1814,12 @@
"ReCopyTextToClipboard": "Kopier tekst til udklipsholder igen (til oversætter/AI)",
"BlockXOfY": "Bloker {0} af {1}",
"NoTextInClipboard": "Ingen tekst i udklipsholderen",
- "TextInClipboardIsSameAsSourceText": "Teksten i udklipsholderen er den samme som kildeteksten, prøv venligst igen."
+ "TextInClipboardIsSameAsSourceText": "Teksten i udklipsholderen er den samme som kildeteksten, prøv venligst igen.",
+ "LineMerge": "Linjefletning",
+ "DelayInSecondsBetweenRequests": "Forsinkelse i sekunder mellem anmodninger",
+ "MaxBytesPerRequest": "Maks. bytes pr. anmodning",
+ "PromptText": "Spørg tekst",
+ "TranslateEachLineSeparately": "Oversæt hver linje separat"
},
"Options": {
"Settings": {
@@ -1808,7 +1912,7 @@
"MaxLines": "Max antal linjer",
"UnbreakSubtitlesShortThan": "Split undertekster kortere end",
"NewEmptyDefaultMs": "Standard ny undertekstvarighed (ms)",
- "PromptDeleteLines": "Spørg om sletning af linjer",
+ "PromptBeforeDelete": "Spørg før sletning",
"RememberPositionAndSize": "Husk vinduets placering og størrelse",
"AutoBackupOn": "Auto-backup",
"AutoBackupIntervalMinutes": "Interval for automatisk backup (minutter)",
@@ -1973,7 +2077,9 @@
"AllSettings": "Alle indstillinger",
"UiScale": "UI-skaler (%)",
"WaveformToolbarItems": "Waveform værktøjslinjeelementer",
- "MatchIconColorToDarkTheme": "Match ikonfarve til mørk temaforgrundsfarve"
+ "MatchIconColorToDarkTheme": "Match ikonfarve til mørk temaforgrundsfarve",
+ "SubtitlePreviewProperties": "Egenskaber til forhåndsvisning af undertekster",
+ "PixelWidthInfo": "Grønne linjer = maks. breddegrænse | \r\nRødt område = tekst overskrider grænsen"
},
"Shortcuts": {
"Title": "Shortcuts",
@@ -2244,7 +2350,13 @@
}
},
"Help": {
- "AboutSubtitleEdit": "Om Subtitle Edit"
+ "AboutSubtitleEdit": "Om Subtitle Edit",
+ "CheckForUpdates": "Se efter opdateringer",
+ "CheckForUpdatesChecking": "Søger efter opdateringer...",
+ "CheckForUpdatesUpToDate": "Du kører den seneste version.",
+ "CheckForUpdatesNewVersionAvailable": "Ny version tilgængelig: {0}",
+ "CheckForUpdatesUnableToCheck": "Kan ikke søge efter opdateringer.",
+ "CheckForUpdatesDownloadNewVersion": "Download ny version"
},
"Ocr": {
"LinesToDraw": "Linjer at tegne",
diff --git a/src/UI/Assets/Languages/Dutch.json b/src/UI/Assets/Languages/Dutch.json
new file mode 100644
index 00000000000..9e22972fbaa
--- /dev/null
+++ b/src/UI/Assets/Languages/Dutch.json
@@ -0,0 +1,2631 @@
+{
+ "Title": "Subtitle Edit",
+ "TranslatedBy": "",
+ "CultureName": "nl-NL",
+ "General": {
+ "Abort": "Afbreken",
+ "Actor": "Acteur",
+ "Actors": "Acteurs",
+ "Add": "Toevoegen",
+ "AddDotDotDot": "Toevoegen...",
+ "AddToNamesListCaseSensitive": "Toevoegen aan namenlijst (hoofdlettergevoelig)",
+ "AddToUserDictionary": "Toevoegen aan gebruikerswoordenboek",
+ "AddVideoFiles": "Videobestanden toevoegen...",
+ "AdjustAlpha": "Alpha aanpassen (transparantie)",
+ "AdjustDisplayDuration": "Weergaveduur aanpassen",
+ "Adjustment": "Aanpassing",
+ "Advanced": "Geavanceerd",
+ "AdvancedSettings": "Geavanceerde instellingen",
+ "After": "Na",
+ "Alignment": "Uitlijning",
+ "AlignmentDotDotDot": "Uitlijning...",
+ "AlignmentX": "Stel uitlijning \"{0}\" in voor geselecteerde regels",
+ "All": "Alle",
+ "AllFiles": "Alle bestanden",
+ "AlphaAdjustment": "Alpha-aanpassing",
+ "AphaThreshold": "Alpha-drempelwaarde",
+ "ApiKey": "API-sleutel",
+ "ApiSecret": "Geheim",
+ "Appearance": "Uiterlijk",
+ "Append": "Toevoegen (achteraan)",
+ "Apply": "Toepassen",
+ "ApplyTo": "Toepassen op",
+ "Ascending": "Oplopend",
+ "AttachDotDotDot": "Bijvoegen...",
+ "AudioFiles": "Audiobestanden",
+ "AudioVisualizer": "Audiovisualisatie",
+ "Auto": "Auto",
+ "AutoBreak": "Regels automatisch afbreken",
+ "AutoContinue": "Automatisch doorgaan",
+ "AutoTranslate": "Automatisch vertalen",
+ "Autodetect": "Automatisch detecteren",
+ "Background": "Achtergrond",
+ "BackgroundColor": "Achtergrondkleur",
+ "Backward": "Achteruit",
+ "BatchMode": "Batchmodus",
+ "BdnXml": "BDN/xml",
+ "Before": "Voor",
+ "BeforeX": "Voor \"{0}\"",
+ "Beginning": "Begin",
+ "BluRaySup": "Blu-ray (sup)",
+ "Bold": "Vet",
+ "BookmarkAdd": "Bladwijzer toevoegen",
+ "BookmarkAddForSelectedLinesX": "Bladwijzer toevoegen voor {0} geselecteerde regels",
+ "BookmarkClearQuestion": "Alle bladwijzers wissen?",
+ "BookmarkDeleteSelectedQuestion": "Geselecteerde bladwijzer verwijderen?",
+ "BookmarkDotDotDot": "Bladwijzer...",
+ "BookmarkEdit": "Bladwijzer bewerken",
+ "BookmarkEditForSelectedLinesX": "Bladwijzer bewerken voor {0} geselecteerde regels",
+ "BookmarksList": "Bladwijzers weergeven",
+ "BorderColor": "Randkleur",
+ "BorderStyle": "Randstijl",
+ "BottomCenter": "Onder-Midden",
+ "BottomLeft": "Onder-Links",
+ "BottomRight": "Onder-Rechts",
+ "Box": "Kader",
+ "BoxColor": "Kaderkleur",
+ "BoxCornerRadius": "Kader hoekstraal",
+ "BoxPerLine": "Kader per regel",
+ "BridgeGaps": "Gaten overbruggen",
+ "Cancel": "_Annuleren",
+ "Cancelled": "Geannuleerd",
+ "CaseInsensitive": "Niet hoofdlettergevoelig",
+ "CaseSensitive": "Hoofdlettergevoelig",
+ "Category": "Categorie",
+ "Center": "Midden",
+ "CenterHorizontally": "Horizontaal centreren",
+ "CenterVertically": "Verticaal centreren",
+ "Change": "Wijzigen",
+ "ChangeAll": "Alles wijzigen",
+ "ChangeCasing": "Hoofdlettergebruik wijzigen",
+ "ChangeFormatting": "Opmaak wijzigen",
+ "ChangeFrameRate": "Framerate wijzigen",
+ "ChangeLanguageFilter": "Taalfilter wijzigen...",
+ "ChangeOnce": "Eén keer wijzigen",
+ "ChangeSpeed": "Snelheid wijzigen",
+ "Character": "Teken",
+ "Characters": "Tekens",
+ "CharsPerSec": "Tekens/sec",
+ "ChooseColorDotDotDot": "Kies kleur...",
+ "ChooseImageFiles": "Kies afbeeldingen",
+ "Class": "Klasse",
+ "Classic": "Klassiek",
+ "Clear": "Wissen",
+ "Close": "Sluiten",
+ "Codec": "Codec",
+ "Collapse": "Inklappen",
+ "Color": "Kleur",
+ "ColorDotDotDot": "Kleur...",
+ "Column": "Kolom",
+ "ConsoleLog": "Consolelog",
+ "ContentAlignment": "Inhoudsuitlijning",
+ "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",
+ "CopyTextToClipboard": "Tekst naar klembord kopiëren",
+ "CouldNotSaveFileXErrorY": "Kan bestand \"{0}\" niet opslaan. Fout: {1}",
+ "Count": "Aantal",
+ "Cps": "Tekens/sec",
+ "CurrentSubtitle": "Huidige ondertitel",
+ "CurrentVideoPosition": "Huidige videopositie",
+ "Cut": "Knippen",
+ "Dark": "Donker",
+ "DateAndTime": "Datum en tijd",
+ "Default": "Standaard",
+ "Delete": "Verwijderen",
+ "DeleteAtPosition": "Ondertitel op videopositie verwijderen",
+ "DeleteCurrentLine": "Huidige regel verwijderen",
+ "DeleteFirstLines": "Eerste regels verwijderen",
+ "DeleteLastLines": "Laatste regels verwijderen",
+ "DeleteLineXPrompt": "Regelnummer {0} verwijderen?",
+ "DeleteLines": "Regels verwijderen",
+ "DeleteLinesContainingText": "Regels met tekst verwijderen",
+ "DeleteXLinesPrompt": "{0} regels verwijderen?",
+ "Description": "Beschrijving",
+ "Dictionary": "Woordenboek",
+ "DiskSpace": "Schijfruimte",
+ "DoNoChange": "Niet wijzigen",
+ "Done": "Gereed",
+ "DoubleWords": "Dubbele woorden",
+ "DoubleLines": "Dubbele regels",
+ "Download": "Downloaden",
+ "DownloadX": "Download {0}",
+ "DownloadingX": "Bezig met downloaden van {0}",
+ "DownloadingXPercent": "Downloaden: {0}%",
+ "Duplicate": "Dupliceren",
+ "Duration": "Duur",
+ "DurationMinutes": "Duur in minuten",
+ "Edit": "Bewerken",
+ "EditDotDotDot": "Bewerken...",
+ "Editing": "Bezig met bewerken",
+ "Effect": "Effect",
+ "Enabled": "Ingeschakeld",
+ "Encoding": "Codering",
+ "EndTime": "Eindtijd",
+ "Engine": "Engine",
+ "EnterProfileName": "Voer profielnaam in",
+ "Error": "Fout",
+ "ErrorX": "Fout: {0}",
+ "Example": "Voorbeeld",
+ "ExampleX": "Voorbeeld: {0}",
+ "Expand": "Uitvouwen",
+ "Export": "Exporteren",
+ "ExportDotDotDot": "Exporteren...",
+ "ExportToX": "Exporteren naar {0}",
+ "ExtendAfter": "Verlengen/inkorten naar volgende regel",
+ "ExtendBefore": "Verlengen/inkorten naar vorige regel",
+ "ExtendSelectedLinesToNextShotChangeOrNextSubtitle": "Geselecteerde regels verlengen naar volgende shot-wijziging (of ondertitel)",
+ "ExtendSelectedToNext": "Geselecteerde verlengen naar volgende",
+ "ExtendSelectedToPrevious": "Geselecteerde verlengen naar vorige",
+ "ExtractingAudioClips": "Audiofragmenten extraheren...",
+ "Fade": "Fade",
+ "FetchFirstWordFromNextSubtitle": "Eerste woord van volgende ondertitel ophalen",
+ "FileAlreadyExists": "Bestand bestaat al",
+ "FileExtension": "Bestandsextensie",
+ "FileName": "Bestandsnaam",
+ "FileNameX": "Bestandsnaam: {0}",
+ "FileNameXAndSize": "Bestandsnaam: {0} ({1})",
+ "FileSaved": "Bestand opgeslagen",
+ "FileSavedToX": "Bestand opgeslagen in {0}",
+ "FileXAlreadyExists": "Bestand \"{0}\" bestaat al.",
+ "FileXOfY": "Bestand {0} van {1}",
+ "Filter": "Filter",
+ "FilterByLayer": "Filteren op laag",
+ "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",
+ "FixRightToLeftViaUnicodeTags": "RTL herstellen via Unicode-tags",
+ "FixedValue": "Vaste waarde",
+ "FocusSelectedLine": "Focus op geselecteerde regel (scrollen in rooster)",
+ "Font": "Lettertype",
+ "FontColor": "Tekstkleur",
+ "FontHeight": "Letterhoogte",
+ "FontName": "Lettertypenaam",
+ "FontNameDotDotDot": "Lettertypenaam...",
+ "FontSize": "Lettergrootte",
+ "Fonts": "Lettertypen",
+ "Footer": "Voettekst",
+ "Forced": "Geforceerd",
+ "Foreground": "Voorgrond",
+ "Format": "Formaat",
+ "Forward": "Vooruit",
+ "FoundNoMatches": "Geen overeenkomsten gevonden",
+ "FoundOneMatch": "Eén overeenkomst gevonden",
+ "FoundXInLineYZ": "\"{0}\" gevonden in regel {1}, positie {2}",
+ "FoundXMatches": "{0} overeenkomsten gevonden",
+ "FrameRate": "Framerate",
+ "FrameRateX": "Framerate: {0:0.0###}",
+ "Frames": "Frames",
+ "From": "Van",
+ "FromCurrentVideoPosition": "vanaf huidige videopositie",
+ "Gap": "Gat",
+ "General": "Algemeen",
+ "GeneralText": "Algemeen",
+ "Generate": "Genereren",
+ "GenerateImportShotChanges": "Shot-wijzigingen genereren/importeren",
+ "Generating": "Bezig met genereren...",
+ "GeneratingImageXofY": "Afbeelding {0:#,##0} van {1:#,##0} genereren...",
+ "GeneratingWavFile": "WAV-bestand genereren...",
+ "GetAudioClips": "Audiofragmenten ophalen",
+ "GoTo": "Ga naar",
+ "GoToLineNumber": "Ga naar regelnummer",
+ "GoToNextShotChange": "Ga naar volgende shot-wijziging",
+ "GoToPreviousShotChange": "Ga naar vorige shot-wijziging",
+ "GoogleIt": "Google het",
+ "Group": "Groep",
+ "Header": "Koptekst",
+ "Height": "Hoogte",
+ "Help": "Help",
+ "Hex": "Hex",
+ "Hide": "Verbergen",
+ "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",
+ "ImagedBasedSubtitles": "Ondertitels gebaseerd op afbeeldingen",
+ "Images": "Afbeeldingen",
+ "ImagesWithTimeCode": "Afbeeldingen met tijdcode",
+ "Import": "Importeren",
+ "ImportDotDotDot": "Importeren...",
+ "Include": "Inclusief",
+ "Information": "Informatie",
+ "InsertAfter": "Invoegen na",
+ "InsertAtPositionAndFocusTextBox": "Ondertitel op videopositie invoegen en tekstvak focus geven",
+ "InsertAtPositionNoFocusTextBox": "Ondertitel op videopositie invoegen (geen focus tekstvak)",
+ "InsertBefore": "Invoegen voor",
+ "InsertLine": "Regel invoegen",
+ "InsertNewSelection": "Nieuwe selectie invoegen",
+ "InsertSubtitleAfterCurrentLine": "Ondertitel invoegen na huidige regel...",
+ "InsertSubtitleFileAtVideoPositionDotDotDot": "Ondertitelbestand invoegen op videopositie...",
+ "InspectAdditions": "Toevoegingen inspecteren...",
+ "InvertSelection": "Selectie omkeren",
+ "IsDefault": "Is standaard",
+ "Italic": "Cursief",
+ "KeepExistingTimeCodes": "Bestaande tijdcodes behouden (geen video-offset toevoegen)",
+ "KeyFile": "Sleutelbestand",
+ "Language": "Taal",
+ "LanguagePostFix": "Taal-postfix (mkv/mp4)",
+ "Layer": "Laag",
+ "LayerFilterOn": "Laagfilter aan",
+ "Left": "Links",
+ "Light": "Licht",
+ "LineHeigth": "Regelhoogte",
+ "LineNumber": "Regel#",
+ "LineXColumnY": "Regel {0}, kolom {1}",
+ "Lines": "Regels",
+ "LinesAddedX": "Regels toegevoegd: {0}",
+ "LinesChangedX": "Regels gewijzigd: {0}",
+ "LinesDeletedX": "Regels verwijderd: {0}",
+ "ListErrors": "Fouten weergeven",
+ "LoadDefaults": "Standaardwaarden laden",
+ "LockTimeCodes": "Tijdcodes vergrendelen",
+ "Logo": "Logo",
+ "Margin": "Marge",
+ "Match": "Overeenkomst",
+ "MaxCharactersPerSecond": "Max. tekens per seconde",
+ "MediaInformation": "Media-informatie",
+ "MergeAfter": "Samenvoegen met volgende regel",
+ "MergeBefore": "Samenvoegen met vorige regel",
+ "MergeLines": "Regels samenvoegen",
+ "MergeLinesWithSameText": "Regels met dezelfde tekst samenvoegen",
+ "MergeLinesWithSameTimeCodes": "Regels met dezelfde tijdcodes samenvoegen",
+ "MergeSelected": "Geselecteerde samenvoegen",
+ "MergeSelectedAsDialog": "Geselecteerde samenvoegen als dialoog",
+ "MergeSelectedLines": "Geselecteerde regels samenvoegen",
+ "MergeSelectedLinesDialog": "Geselecteerde regels samenvoegen als dialoog",
+ "MergeWithLineAfterAndAutoBreak": "Samenvoegen met volgende regel en auto-afbreken",
+ "MergeWithLineAfterKeepBreaks": "Samenvoegen met volgende regel (afbrekingen behouden)",
+ "MergeWithLineBeforeAndAutoBreak": "Samenvoegen met vorige regel en auto-afbreken",
+ "MergeWithLineBeforeKeepBreaks": "Samenvoegen met vorige regel (afbrekingen behouden)",
+ "MiddleCenter": "Midden-Centrum",
+ "MiddleLeft": "Midden-Links",
+ "MiddleRight": "Midden-Rechts",
+ "Milliseconds": "Milliseconden",
+ "Model": "Model",
+ "Models": "Modellen",
+ "More": "Meer",
+ "MoreInfo": "Meer info",
+ "MoveAllShotChangeOneFrameBack": "Alle shot-wijzigingen één frame terugplaatsen",
+ "MoveAllShotChangeOneFrameForward": "Alle shot-wijzigingen één frame vooruitplaatsen",
+ "MoveDown": "Omlaag verplaatsen",
+ "MoveUp": "Omhoog verplaatsen",
+ "MultipleReplace": "Meervoudig vervangen",
+ "Name": "Naam",
+ "Negative": "Negatief",
+ "New": "Nieuw",
+ "NewDotDotDot": "Nieuw...",
+ "NewProfile": "Nieuw profiel",
+ "NewSubtitleStartKeyDownSetEndKeyUp": "Ondertitel invoegen: Start bij toets indrukken, eind bij loslaten",
+ "SetSubtitleStartAtVideoPositionSetEndAtKeyUpAndGoToNext": "Start op videopositie, eind bij loslaten toets, en ga naar volgende",
+ "No": "Nee",
+ "NoFilesToConvert": "Geen bestanden om te converteren",
+ "NoLanguageCode": "Geen taalcode",
+ "NoSubtitleLoaded": "Geen ondertitel geladen",
+ "NoSubtitlesFound": "Geen ondertitels gevonden!",
+ "NoSymbolLines": "#Regels",
+ "NoVideoLoaded": "Geen video geladen",
+ "None": "Geen",
+ "NormalCasing": "Normaal hoofdlettergebruik",
+ "NotAvailable": "N.v.t.",
+ "NotInstalled": "Niet geïnstalleerd",
+ "Number": "Nummer",
+ "NumberSymbol": "#",
+ "OcrDotDotDot": "OCR...",
+ "OcrPercentX": "OCR: {0}%",
+ "Offset": "Offset",
+ "OffsetTimeCodes": "Tijdcodes verschuiven",
+ "OffsetX": "X-verschuiving",
+ "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...",
+ "OpenVideoFileTitle": "Videobestand openen",
+ "OptimalCharactersPerSecond": "Optimale tekens per seconde",
+ "Options": "Opties",
+ "OriginalText": "Originele tekst",
+ "Outline": "Contour",
+ "OutlineColor": "Contourkleur",
+ "OutlineWidth": "Contourbreedte",
+ "OutputFolder": "Uitvoermap",
+ "OutputProperties": "Uitvoereigenschappen",
+ "Overlap": "Overlapping",
+ "OverlapNextX": "Overlap volgende ({0:#;##0.###})",
+ "OverlapPreviousLineX": "Overlap vorige regel ({0:#;##0.###})",
+ "OverlapStartAndEnd": "Overlap begin en eind",
+ "OverlapX": "Overlapping ({0:#;##0.###})",
+ "OverwriteExistingFiles": "Bestaande bestanden overschrijven",
+ "OverwriteFilesInFolderX": "Bestanden in map overschrijven: \"{0}\"",
+ "OverwriteQuestion": "Overschrijven?",
+ "Padding": "Opvulling",
+ "Parameters": "Parameters",
+ "ParsingXDotDotDot": "Bezig met verwerken van {0}...",
+ "Paste": "Plakken",
+ "PasteNewSelection": "Klembordtekst in nieuwe selectie plakken",
+ "Pause": "Pauze",
+ "Percent": "Procent",
+ "PickLayer": "Laag instellen",
+ "PickOllamaModel": "Kies Ollama-model",
+ "PickOutputFolder": "Kies uitvoermap",
+ "PickResolutionFromCurrentVideo": "Resolutie van huidige video overnemen",
+ "PickResolutionFromVideoDotDotDot": "Resolutie van video overnemen...",
+ "PickSubtitleFile": "Kies ondertitelbestand...",
+ "PickVideoFile": "Kies videobestand...",
+ "PickVideoPosition": "Kies videopositie",
+ "Play": "Afspelen",
+ "PlayFromStartOfVideo": "Vanaf begin van video afspelen",
+ "PlayNext": "Volgende afspelen",
+ "PlaySelectedLines": "Geselecteerde regels afspelen",
+ "PlaySelectedLinesWithLoop": "Geselecteerde regels herhaald afspelen",
+ "PleaseEnterAValidValueForX": "Voer een geldige waarde in voor \"{0}\"",
+ "PleaseWait": "Even geduld a.u.b...",
+ "Position": "Positie",
+ "PositionX": "Positie: {0}",
+ "PostProcessing": "Nabewerking",
+ "PoweredBy": "Mogelijk gemaakt door",
+ "Prefix": "Voorvoegsel",
+ "Preview": "Voorbeeld",
+ "Profile": "Profiel",
+ "ProfileName": "Profielnaam",
+ "Profiles": "Profielen",
+ "Property": "Eigenschap",
+ "Question": "Vraag",
+ "ReDownloadX": "{0} opnieuw downloaden",
+ "Reason": "Reden",
+ "RecentFiles": "Recente bestanden",
+ "Redo": "Opnieuw",
+ "Refresh": "Vernieuwen",
+ "Region": "Regio",
+ "RegularExpression": "Reguliere expressie",
+ "RegularExpressionIsNotValid": "Reguliere expressie is niet geldig!",
+ "RelativeToCurrentVideoPosition": "Relatief aan huidige videopositie",
+ "Remove": "Verwijderen",
+ "RemoveAlignment": "Uitlijning verwijderen",
+ "RemoveAllFormatting": "Alle opmaak verwijderen",
+ "RemoveBlankLines": "Lege regels verwijderen",
+ "RemoveBold": "Vet verwijderen",
+ "RemoveColor": "Kleur verwijderen",
+ "RemoveFilter": "Filter verwijderen",
+ "RemoveFontName": "Lettertypenaam verwijderen",
+ "RemoveFormatting": "Opmaak verwijderen",
+ "RemoveItalic": "Cursief verwijderen",
+ "RemoveRightToLeftUnicodeTags": "RTL Unicode-tags verwijderen",
+ "RemoveSelectedFile": "Geselecteerd bestand verwijderen?",
+ "RemoveStyling": "Stijl verwijderen",
+ "RemoveTextForHearingImpaired": "Tekst voor slechthorenden verwijderen",
+ "RemoveUnderline": "Onderstreping verwijderen",
+ "Rename": "Hernoemen",
+ "Replace": "Vervangen",
+ "ReplaceWith": "Vervangen door",
+ "RequiresRestart": "Vereist herstart",
+ "Reset": "Resetten",
+ "Resolution": "Resolutie",
+ "ResolutionX": "Resolutie: {0}",
+ "ReverseRightToLeftStartEnd": "RTL begin/eind omkeren",
+ "Right": "Rechts",
+ "RightToLeft": "Rechts naar links",
+ "Rules": "Regels",
+ "SaveChangesMessage": "Wilt u de wijzigingen in het huidige ondertitelbestand opslaan?",
+ "SaveChangesTitle": "Wijzigingen opslaan?",
+ "SaveChangesToX": "Wilt u de wijzigingen in \"{0}\" opslaan?",
+ "SaveChangesToXOriginal": "Wilt u de wijzigingen in het originele ondertitelbestand \"{0}\" opslaan?",
+ "SaveDotDotDot": "Opslaan...",
+ "SaveFileAsTitle": "Bestand opslaan als",
+ "SaveImageAs": "Afbeelding opslaan als",
+ "SaveImageAsDotDotDot": "Afbeelding opslaan als...",
+ "SaveOriginalAsTitle": "Origineel opslaan als",
+ "SaveTranslationAsTitle": "Vertaling opslaan als",
+ "SaveVideoAsVideoTitle": "Video opslaan als",
+ "SavedChangesToX": "\"{0}\" opgeslagen",
+ "SavedChangesToXAndY": "\"{0}\" en \"{1}\" opgeslagen",
+ "SavingDotDotDot": "Bezig met opslaan...",
+ "Script": "Script",
+ "Search": "Zoeken",
+ "SearchDirection": "Zoekrichting",
+ "SearchFontNames": "Lettertypen zoeken...",
+ "SearchSubtitleFormats": "Ondertitelformaten zoeken",
+ "Seconds": "Seconden",
+ "SelectAll": "Alles selecteren",
+ "SelectFilesToConvert": "Bestanden kiezen om te converteren",
+ "SelectNone": "Niets selecteren",
+ "SelectSaveFolder": "Kies een map om op te slaan",
+ "SelectSubtitle": "Ondertitel selecteren",
+ "SelectedAFolderToSaveTo": "Map gekozen om in op te slaan",
+ "SelectedLines": "Geselecteerde regels",
+ "SelectedlinesX": "Geselecteerde regels: {0}",
+ "Sensitivity": "Gevoeligheid",
+ "Separator": "Scheidingsteken",
+ "SessionKey": "Sessiesleutel",
+ "SessionKeyGenerate": "Nieuwe sleutel genereren",
+ "SetEnd": "Eindtijd instellen",
+ "SetEndAndGoToNext": "Eind instellen en naar volgende",
+ "SetEndAndOffsetTheRest": "Eind instellen en rest verschuiven",
+ "SetFontDotDotDot": "Lettertype instellen...",
+ "SetStart": "Begintijd instellen",
+ "SetStartAndOffsetTheRest": "Begin instellen en rest verschuiven",
+ "SetVideoOffset": "Video-offset instellen",
+ "Settings": "Instellingen",
+ "Shadow": "Schaduw",
+ "ShadowColor": "Schaduwkleur",
+ "ShadowWidth": "Schaduwbreedte",
+ "Shortcut": "Sneltoets",
+ "ShortcutX": "Sneltoets: {0}",
+ "Shortcuts": "Sneltoetsen",
+ "Show": "Weergeven",
+ "ShowActorColumn": "Kolom \"Acteur\" weergeven",
+ "ShowCpsColumn": "Kolom \"Tekens/sec\" weergeven",
+ "ShowDurationColumn": "Kolom \"Duur\" weergeven",
+ "ShowGapColumn": "Kolom \"Gat\" weergeven",
+ "ShowStartColumn": "Kolom \"Begin\" weergeven",
+ "ShowHideColumn": "Kolom \"Verbergen\" weergeven",
+ "ShowHistory": "Geschiedenis weergeven",
+ "ShowLayerColumn": "Kolom \"Laag\" weergeven",
+ "ShowPreview": "Voorbeeld weergeven",
+ "ShowShotChangesList": "Shot-wijzigingenlijst weergeven",
+ "ShowStyleColumn": "Kolom \"Stijl\" weergeven",
+ "ShowTimeCodes": "Tijdcodes weergeven",
+ "ShowWpmColumn": "Kolom \"Woorden/min\" weergeven",
+ "ShowPixelWidthColumn": "Kolom \"Pixelbreedte\" weergeven",
+ "Shrink": "Verkleinen",
+ "SingleBox": "Enkel kader",
+ "SingleLineLengths": "Lengte enkele regel:",
+ "SingleMode": "Enkele modus",
+ "Size": "Grootte",
+ "SizeX": "Grootte: {0}",
+ "Skip": "Overslaan",
+ "SkipAll": "Alles overslaan",
+ "SkipOnce": "Eén keer overslaan",
+ "Smart": "Slim",
+ "SnapSelectedLinesToNearestShotChange": "Begin/eind van geselecteerde regels uitlijnen op dichtstbijzijnde shot-wijziging",
+ "SolidColor": "Effen kleur",
+ "SourceViewX": "Bronweergave - {0}",
+ "Spacing": "Spatiëring",
+ "SpeechToTextSelectedLines": "Spraak naar tekst geselecteerd (zie Opties - Instellingen)",
+ "SpeechToTextSelectedLinesPromptAlways": "Spraak naar tekst geselecteerde regels (altijd vragen om engine/taal)",
+ "SpeechToTextSelectedLinesPromptFirstTime": "Spraak naar tekst geselecteerde regels (vraag engine/taal alleen eerste keer)",
+ "Speed": "Snelheid",
+ "SplitAtTextBoxCursorPosition": "Splitsen op cursorpositie tekstvak",
+ "SplitLine": "Regel splitsen",
+ "SplitLineAtTextBoxCursorPosition": "Regel splitsen op cursorpositie",
+ "SplitLineAtVideoAndTextBoxPosition": "Regel splitsen op video- en tekstvakpositie",
+ "SplitLineAtVideoPosition": "Regel splitsen op videopositie",
+ "StartFrom": "Beginnen vanaf",
+ "StartTime": "Begintijd",
+ "StartingDotDotDot": "Bezig met starten...",
+ "Status": "Status",
+ "Stereo": "Stereo",
+ "Stop": "Stop",
+ "Strikeout": "Doorhalen",
+ "Style": "Stijl",
+ "StyleExaggeration": "Stijl overrijving",
+ "StyleLanguage": "Stijl / Taal",
+ "Styles": "Stijlen",
+ "SubtitleFile": "Ondertitelbestand",
+ "SubtitleFileName": "Bestandsnaam ondertitel",
+ "SubtitleFileSaved": "Ondertitelbestand opgeslagen",
+ "SubtitleFileSavedToX": "Ondertitelbestand opgeslagen in {0}",
+ "SubtitleFiles": "Ondertitelbestanden",
+ "SubtitleFormats": "Ondertitelformaten",
+ "SubtitleLoadedX": "Ondertitel geladen: {0}",
+ "SubtitleXOfY": "Ondertitel {0} van {1}",
+ "Suffix": "Achtervoegsel",
+ "Suggestions": "Suggesties",
+ "Sync": "Synchroniseren",
+ "SyntaxColoring": "Syntax-kleuring",
+ "System": "Systeem",
+ "TargetEncoding": "Doelcodering",
+ "TargetFormat": "Doelformaat",
+ "TenHours": "10 uur",
+ "TenMilliseconds": "10 milliseconden",
+ "Text": "Tekst",
+ "TextColor": "Tekstkleur",
+ "TextFiles": "Tekstbestanden",
+ "TextOrImage": "Tekst/afbeelding",
+ "ThreeLetterLanguageCode": "Drieletterige taalcode",
+ "Time": "Tijd",
+ "TimeCodes": "Tijdcodes",
+ "Timing": "Timing",
+ "Title": "Titel",
+ "To": "Naar",
+ "ToggleCasing": "Hoofdlettergebruik omschakelen",
+ "ToggleDirection": "Richting omschakelen",
+ "ToggleForced": "Geforceerd omschakelen",
+ "ToggleShotChangesAtVideoPosition": "Shot-wijziging op videopositie omschakelen",
+ "Toolbar": "Werkbalk",
+ "Tools": "Gereedschappen",
+ "TopCenter": "Boven-Midden",
+ "TopLeft": "Boven-Links",
+ "TopRight": "Boven-Rechts",
+ "TotalAdjustmentX": "Totale aanpassing: {0}",
+ "TotalFramesX": "Totaal aantal frames: {0:#;##0.##}",
+ "TotalLengthX": "Totale lengte: {0}",
+ "TotalLengthXSplitLine": "Totale lengte: {0} (regel splitsen!)",
+ "Translate": "Vertalen",
+ "TranslateRow": "Rij vertalen",
+ "Translation": "Vertaling",
+ "TwoLetterLanguageCode": "Tweeletterige taalcode",
+ "Type": "Type",
+ "Unbreak": "Tekst samenvoegen",
+ "UnbreakLines": "Regels samenvoegen",
+ "Underline": "Onderstrepen",
+ "Undo": "Ongedaan maken",
+ "Unknown": "Onbekend",
+ "UnknownSubtitleFormat": "Onbekend ondertitelformaat",
+ "Unpacking7ZipArchiveDotDotDot": "7-zip archief uitpakken...",
+ "UnpackingX": "Bezig met uitpakken van {0}",
+ "Untitled": "Naamloos",
+ "Update": "Bijwerken",
+ "UpdateAndClose": "Bijwerken en sluiten",
+ "UpdateDetails": "Details bijwerken",
+ "UpdatedBy": "Bijgewerkt door",
+ "Url": "URL",
+ "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",
+ "Video500MsBack": "Video, 500 milliseconden terug",
+ "Video500MsForward": "Video, 500 milliseconden vooruit",
+ "VideoCustom1BackX": "Video, aangepaste milliseconden ({0:#,###,##0}) terug, 1",
+ "VideoCustom1ForwardX": "Video, aangepaste milliseconden ({0:#,###,##0}) vooruit, 1",
+ "VideoCustom2BackX": "Video, aangepaste milliseconden ({0:#,###,##0}) terug, 2",
+ "VideoCustom2ForwardX": "Video, aangepaste milliseconden ({0:#,###,##0}) vooruit, 2",
+ "VideoEncodingX": "Videocodering: {0}",
+ "VideoExtension": "Videobestandsextensie",
+ "VideoFile": "Videobestand",
+ "VideoFileGeneratedX": "Videobestand gegenereerd: \"{0}\"",
+ "VideoFiles": "Videobestanden",
+ "VideoInformation": "Video-info",
+ "VideoOffset": "Video-offset",
+ "VideoOneFrameBack": "Video, één frame terug",
+ "VideoOneFrameForward": "Video, één frame vooruit",
+ "VideoOneSecondBack": "Video, één seconde terug",
+ "VideoOneSecondForward": "Video, één seconde vooruit",
+ "VideoPlayer": "Videospeler",
+ "VideoPosition": "Videopositie",
+ "VideoResolution": "Videoresolutie",
+ "ViewX": "{0} bekijken",
+ "Visible": "Zichtbaar",
+ "Voice": "Stem",
+ "Warning": "Waarschuwing",
+ "WaveformCenterOnVideoPosition": "Golfvorm centreren op videopositie",
+ "WaveformPasteFromClipboard": "Plakken van klembord",
+ "WaveformSpectrogram": "Golfvorm/spectrogram",
+ "WebServiceUrl": "Webservice URL",
+ "Width": "Breedte",
+ "WindowPositionAndSize": "Vensterpositie en -grootte",
+ "WordsPerMin": "Woorden/min",
+ "PixelWidth": "Pixelbreedte",
+ "Wpm": "Woorden/min",
+ "XFiles": "{0:#,###,##0} bestanden",
+ "XFilesConvertedInY": "{0:#,###,##0} bestanden geconverteerd in {1}",
+ "XNotFound": "\"{0}\" niet gevonden",
+ "XRequiresAnApiKey": "{0} vereist een API-sleutel",
+ "XSeconds": "{0:0.0##} seconden",
+ "XSubtitles": "{0:#,###,##0} ondertitels",
+ "Yes": "Ja",
+ "CopyToClipboard": "Kopiëren naar klembord",
+ "PlayCurrent": "Huidige afspelen",
+ "LeftMargin": "Linkermarge",
+ "RightMargin": "Rechtermarge",
+ "Installed": "Geïnstalleerd",
+ "AdvancedDotDotDot": "Geavanceerd...",
+ "ChooseAlignment": "Kies uitlijning",
+ "MaxWidthPixels": "Maximale breedte (pixels)",
+ "SampleText": "Voorbeeldtekst",
+ "BoxWidthPixels": "Vakbreedte (pixels)",
+ "FadeInOut": "In-/uitfaden",
+ "Alpha": "Alfa",
+ "PickResolution": "Kies resolutie",
+ "ManualSync": "Handmatige synchronisatie"
+ },
+ "Main": {
+ "AudioTrackIsNowX": "Audiotrack is nu '{0}'",
+ "AudioTrackX": "Audiotrack {0}",
+ "AutoBreakHint": "Geselecteerde regels automatisch afbreken",
+ "CharactersPerSecond": "Tekens/seconde: {0}",
+ "ChooseColumn": "Kies kolom",
+ "ColumnPaste": "Kolom plakken",
+ "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...",
+ "ErrorLoadGZip": "Dit bestand lijkt een gecomprimeerd GZip-bestand te zijn.\r\n\r\n\r\nOndertitelbewerking kan geen gecomprimeerde bestanden openen.",
+ "ErrorLoadJpg": "Dit bestand lijkt een JPG-afbeeldingsbestand te zijn.\r\n\r\n\r\nOndertitelbewerking kan geen afbeeldingsbestanden openen.",
+ "ErrorLoadPng": "Dit bestand lijkt een PNG-afbeeldingsbestand te zijn.\r\n\r\n\r\nOndertitelbewerking kan geen afbeeldingsbestanden openen.",
+ "ErrorLoadRar": "Dit bestand lijkt een gecomprimeerd 7-Zip-bestand te zijn.\r\n\r\n\r\nOndertitelbewerking kan geen gecomprimeerde bestanden openen.",
+ "ErrorLoadSrr": "Dit bestand lijkt een ReScene SRR-bestand te zijn.\r\n\r\n\r\nSubtitle Edit kan SRR-bestanden niet openen.",
+ "ErrorLoadTorrent": "Dit bestand lijkt een BitTorrent-bestand te zijn.\r\n\r\n\r\nOndertitelbewerking kan geen torrent-bestanden openen.",
+ "ErrorLoadZip": "Dit bestand lijkt een gecomprimeerd ZIP-bestand te zijn.\r\n\r\n\r\nOndertitelbewerking kan geen gecomprimeerde bestanden openen.",
+ "ExtractingWaveInfo": "Golfinformatie extraheren...",
+ "ExtractingShotChanges": "Shotwijzigingen extraheren...",
+ "FailedToExtractWaveInfo": "Kan golfinformatie niet extraheren.",
+ "FixedRightToLeftUsingUnicodeControlCharactersX": "Van rechts naar links gecorrigeerd met Unicode-besturingstekens in {0} regels",
+ "GeneratingSpectrogramDotDotDot": "Spectrogram genereren...",
+ "GeneratingWaveformDotDotDot": "Golfvorm genereren...",
+ "InsertEmptyTextAndShiftCellsDown": "Voeg lege tekst in en verplaats cellen naar beneden",
+ "InsertTextFromSubtitleDotDotDot": "Tekst uit ondertitel invoegen...",
+ "CopyTextFromOriginalToCurrent": "Kopieer tekst van origineel naar huidige ondertitel",
+ "InsertedXTextsFromSubtitleY": "{0} teksten ingevoegd uit ondertitelbestand \"{1}",
+ "ItalicHint": "Cursief geselecteerde regels/tekst",
+ "JoinedSubtitleLoaded": "Samengevoegde ondertitel geladen",
+ "LineXTextAndTimingChanged": "Regel {0}: Tekst en timing gewijzigd",
+ "LineXTextChangedFromYToZ": "Regel {0}: tekst gewijzigd van '{1}' in '{2}'",
+ "LineXTimingChanged": "Regel {0}: Timing gewijzigd",
+ "LoadingWaveInfoFromCache": "Wave-informatie uit cache laden...",
+ "NoTextInClipboard": "Geen tekst op het klembord",
+ "OneLineCopiedFromOriginal": "Eén regel gekopieerd van de originele ondertitel",
+ "OneLineMerged": "Eén regel samengevoegd",
+ "OneLineSwitched": "Eén lijn is geschakeld",
+ "OverwriteExistingCells": "Bestaande cellen overschrijven",
+ "OverwriteOrShiftCellsDown": "Cellen overschrijven/naar beneden verschuiven",
+ "ParsingMatroskaFile": "Matroska-bestand parseren...",
+ "PasteFromClipboardDotDotDot": "Plakken vanaf klembord...",
+ "RedoPerformed": "Opnieuw uitgevoerd",
+ "RedoPerformedXActionLeft": "Opnieuw uitgevoerd (resterende acties: {0})",
+ "RemovedUnicodeControlCharactersX": "Unicode-besturingstekens verwijderd uit {0} regels",
+ "RemovedXBlankLines": "{0} lege regels verwijderd",
+ "ReplacedXWithYCountZ": "Vervangen \"{0}\" door \"{1}\" ({2} exemplaren)",
+ "ReplacedXWithYInLineZ": "'{0}' vervangen door '{1}' in regel {2}",
+ "ReversedStartAndEndingsForRightToLeftX": "Omgekeerde start en einde voor rechts naar links in {0} regels",
+ "RuleProfileIsX": "Regelprofiel is nu '{0}'",
+ "SaveLanguageFile": "Taalbestand opslaan",
+ "SaveXFileAs": "Sla {0} bestand op als",
+ "ShiftTextCellsDown": "Verplaats tekstcellen naar beneden",
+ "SingleLineLength": "Lijnlengte:",
+ "SpeedIsNowX": "Snelheid is nu \"{0}",
+ "SpellCheckResult": "Spellingcontrole voltooid.\r\n\r\n\r\n• Gewijzigde woorden: {0}\r\n\r\n• Overgeslagen woorden: {1}",
+ "SubtitleImportedFromMatroskaFile": "Ondertitel geïmporteerd uit Matroska-bestand",
+ "TextDown": "Tekst naar beneden",
+ "TextOnly": "Alleen tekst",
+ "TextUp": "Tekst omhoog",
+ "TimeCodesOnly": "Alleen tijdcodes",
+ "XPropertiesDotDotDot": "{0} eigenschappen...",
+ "TotalCharacters": "Totaal aantal tekens: {0}",
+ "UnbreakHint": "Geselecteerde lijnen ongedaan maken",
+ "UndoPerformed": "Ongedaan maken uitgevoerd",
+ "UndoPerformedXActionLeft": "Ongedaan gemaakt (resterende acties: {0})",
+ "XLinesCopiedFromOriginal": "{0} regels gekopieerd van de originele ondertitel",
+ "XLinesMerged": "X-lijnen samengevoegd",
+ "XLinesSelectedOfY": "{0} regels geselecteerd uit {1}",
+ "XLinesSwitched": "{0} lijnen zijn verwisseld",
+ "XShotChangedLoaded": "{0} opnamewijzigingen geladen",
+ "YoutubeDlDownloadedSuccessfully": "\"yt-dlp\" succesvol gedownload.",
+ "YoutubeDlNotInstalledDownloadNow": "\"yt-dlp\" is niet geïnstalleerd en is vereist voor het afspelen van online video's.\r\n\r\n\r\nNu downloaden?",
+ "InsertUnicodeSymbol": "Unicode-symbool invoegen",
+ "TrimmedXLines": "{0} ondertitelregels bijgesneden",
+ "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?",
+ "VideoOpenedChangeLayoutQuestion": "Er is een videobestand geopend.\r\n\r\n\r\nWilt u de lay-out wijzigen om het videopaneel weer te geven?",
+ "SortedByStartTime": "Gesorteerd op \"Weergeven\"-tijd",
+ "SortedByEndTime": "Gesorteerd op \"Verbergen\"-tijd",
+ "ColorHint": "Kleur geselecteerde lijnen",
+ "RemoveFormattingHint": "Verwijder de opmaak van geselecteerde regels",
+ "AssaResolutionResamplerDone": "ASSA-resolutie gewijzigd.",
+ "LanguageFileSavedToX": "Taalbestand opgeslagen in {0}",
+ "FileExportedInFormatXToY": "Bestand geëxporteerd in formaat {0} naar {1}",
+ "FileExportedInFormatXToFileY": "Bestand geëxporteerd in formaat \"{0}\" naar bestand \"{1}",
+ "FixedXLines": "Vaste {0} lijnen",
+ "TranscriptionCompletedWithXLines": "Transcriptie voltooid met {0} regels",
+ "ReplacedXOccurrences": "{0} exemplaren vervangen",
+ "FfmpegDownloadedAndInstalledToX": "ffmpeg gedownload en geïnstalleerd op {0}",
+ "NothingToSave": "Niets om op te slaan",
+ "NothingToSaveOriginal": "Niets om op te slaan (origineel)",
+ "LiveSpellCheckLanguageXLoaded": "Live spellingcontroletaal {0} geladen",
+ "DownloadFfmpegTitle": "FFmpeg downloaden?",
+ "DownloadFfmpegQuestion": "FFmpeg is vereist voor het afspelen van online video's en voor sommige videobewerkingsfuncties.\r\n\r\n\r\nFFmpeg nu downloaden?",
+ "Menu": {
+ "File": "_Bestand",
+ "New": "_Nieuw",
+ "NewKeepVideo": "Nieuw (video _behouden)",
+ "Open": "_Openen...",
+ "OpenKeepVideo": "Openen (_video behouden)...",
+ "OpenOriginal": "Origineel _openen...",
+ "CloseOriginal": "Origineel _sluiten",
+ "Reopen": "_Heropenen...",
+ "ClearRecentFiles": "Recente bestanden _wissen",
+ "RestoreAutoBackup": "Auto-_backup herstellen...",
+ "Save": "_Opslaan",
+ "SaveAs": "Opslaan _als...",
+ "OpenContainingFolder": "Bevattende _map openen",
+ "Compare": "Vergelij_ken...",
+ "Statistics": "Statistieken...",
+ "Import": "_Importeren",
+ "Export": "_Exporteren",
+ "Exit": "A_fsluiten",
+ "Edit": "Be_werken",
+ "Undo": "_Ongedaan maken",
+ "Redo": "_Opnieuw",
+ "ShowHistory": "Ge_schiedenis voor ongedaan maken...",
+ "Find": "_Zoeken...",
+ "FindNext": "_Volgende zoeken",
+ "Replace": "_Vervangen...",
+ "MultipleReplace": "_Meervoudig vervangen...",
+ "GoToLineNumber": "Ga naar _regelnummer...",
+ "RightToLeftMode": "_Rechts-naar-links modus",
+ "ModifySelectionDotDotDot": "_Selectie aanpassen...",
+ "Tools": "_Gereedschappen",
+ "ToolsSelectedLines": "Gereedschappen (_geselecteerde regels)",
+ "AdjustDurations": "_Duur aanpassen...",
+ "ApplyDurationLimits": "Duurgrenzen _toepassen...",
+ "BatchConvert": "_Batch-conversie...",
+ "BridgeGaps": "Gaten _overbruggen...",
+ "ApplyMinGap": "Minimale afstand tussen ondertitels toepassen...",
+ "ChangeCasing": "_Hoofdlettergebruik wijzigen...",
+ "ChangeFormatting": "Opmaak wijzigen...",
+ "FixCommonErrors": "Veelvoorkomende fouten _herstellen...",
+ "CheckAndFixNetflixErrors": "Controleer en herstel Netfli_x-fouten...",
+ "MakeEmptyTranslationFromCurrentSubtitle": "Maak een nieuwe _lege vertaling van de huidige ondertitel",
+ "MergeLinesWithSameText": "_Lijnen met dezelfde tekst samenvoegen...",
+ "MergeLinesWithSameTimeCodes": "Lijnen met dezelfde tijdcodes samenvoegen...",
+ "SplitBreakLongLines": "Lange lijnen splitsen/herbalanceren...",
+ "MergeShortLines": "Korte lijnen samenvoegen...",
+ "Renumber": "Hernummeren...",
+ "RemoveTextForHearingImpaired": "_Verwijder tekst voor slechthorenden...",
+ "ConvertActors": "Acteurs converteren...",
+ "JoinSubtitles": "_Doe mee met ondertitels...",
+ "SplitSubtitle": "_Ondertitel splitsen...",
+ "AssaTools": "_ASSA-hulpmiddelen",
+ "AssaProgressBar": "Genereer _voortgangsbalk...",
+ "AssaChangeResolution": "Wijzig _resolutie...",
+ "AssaGenerateBackground": "Genereer achtergrond_boxes...",
+ "AssaApplyAdvancedEffects": "Geavanceerde _effecten toepassen...",
+ "AssaApplyCustomOverrideTags": "_override-tags toepassen...",
+ "AssaSetPosition": "_Positie instellen...",
+ "AssaImageColorPicker": "_Afbeeldingskleurkiezer...",
+ "AssaDraw": "_Tekenen...",
+ "AssaStyles": "Stijlen...",
+ "AssaProperties": "Eigenschappen...",
+ "AssaAttachments": "_Bijlagen...",
+ "SpellCheckTitle": "_Spellingcontrole",
+ "SpellCheck": "_Spellingcontrole...",
+ "FindDoubleWords": "_Vind dubbele woorden...",
+ "FindDoubleLines": "_Vind dubbele lijnen...",
+ "AddNameToNamesList": "_Voeg naam toe aan namenlijst...",
+ "GetDictionaries": "_Verkrijg woordenboeken...",
+ "Video": "_Video",
+ "OpenVideo": "_Video openen...",
+ "OpenVideoFromUrl": "Video openen van _URL...",
+ "CloseVideoFile": "_Sluit het videobestand",
+ "AudioTracks": "_Audiotracks",
+ "SpeechToText": "_Spraak naar tekst...",
+ "TextToSpeech": "_Tekst naar spraak...",
+ "SetVideoOffset": "Video-offset instellen...",
+ "UpdateVideoOffsetX": "Video-offset bijwerken van {0}...",
+ "SmpteTiming": "SMPTE-timing (niet-gehele framesnelheid)",
+ "GenerateBurnIn": "Genereer video met _ingebrande ondertitels...",
+ "GenerateTransparent": "_Genereer transparante video met ondertitels...",
+ "GenerateImportShotChanges": "Genereer/importeer belangrijke wijzigingen...",
+ "ListShotChanges": "Lijst met belangrijke wijzigingen...",
+ "UndockVideoControls": "_Ontkoppel de videobediening",
+ "DockVideoControls": "_Dock videobediening",
+ "Synchronization": "Synchronisatie",
+ "AdjustAllTimes": "_Alle tijden aanpassen...",
+ "ChangeFrameRate": "Wijzig _framesnelheid...",
+ "ChangeSpeed": "Wijzig _snelheid...",
+ "VisualSync": "_Visuele synchronisatie...",
+ "Options": "_Opties",
+ "Settings": "_Instellingen...",
+ "Shortcuts": "S_snelkoppelingen...",
+ "WordLists": "_Woordenlijsten...",
+ "ChooseLanguage": "_Kies UI-taal...",
+ "Translate": "Vertalen",
+ "AutoTranslate": "_Automatisch vertalen...",
+ "TranslateViaCopyPaste": "Automatisch vertalen via _copy-paste...",
+ "HelpTitle": "_Hulp",
+ "Help": "_Hulp...",
+ "About": "_Over...",
+ "CheckForUpdates": "_Controleer op updates...",
+ "FixRightToLeftViaUnicodeControlCharacters": "RTL repareren via Unicode-besturingstekens (geselecteerde regels)",
+ "RemoveUnicodeControlCharacters": "Unicode-besturingstekens verwijderen (geselecteerde regels)",
+ "ReverseRightToLeftStartEnd": "Omgekeerd RTL begin/einde (geselecteerde regels)",
+ "PointSync": "_Puntsynchronisatie...",
+ "PointSyncViaOther": "Puntsynchronisatie via _other ondertiteling...",
+ "SortSubtitles": "_Ondertiteling sorteren...",
+ "SetLayer": "Laag instellen...",
+ "FilterLayersForDisplayDotDotDot": "Filterlagen voor weergave..."
+ },
+ "Toolbar": {
+ "NewHint": "Start een nieuw ondertitelbestand {0}",
+ "OpenHint": "Open een bestaand ondertitelbestand {0}",
+ "OpenVideoHint": "Open een videobestand {0}",
+ "SaveHint": "Sla de huidige ondertitel {0} op",
+ "SaveAsHint": "Ondertitel opslaan met een nieuwe naam {0}",
+ "FindHint": "Zoek tekst in ondertitels {0}",
+ "ReplaceHint": "Tekst zoeken en vervangen {0}",
+ "SpellCheckHint": "Controleer ondertitels op spelfouten {0}",
+ "FixCommonErrorsHint": "Veelvoorkomende ondertitelfouten oplossen {0}",
+ "SettingsHint": "Programma-instellingen en voorkeuren aanpassen {0}",
+ "LayoutHint": "Werkbalk- en paneelindeling wijzigen {0}",
+ "HelpHint": "Help-website {0} openen",
+ "AutoBreakHint": "Automatisch lange lijnen afbreken {0}",
+ "UnbreakHint": "Ondertitels van meerdere regels samenvoegen tot één regel {0}",
+ "AssaStylesHint": "Geavanceerde Sub Station Alpha-stijlen",
+ "AssaPropertiesHint": "Geavanceerde Sub Station Alpha-eigenschappen",
+ "AssaAttachmentsHint": "Geavanceerde Sub Station Alpha-bijlagen",
+ "AssaDrawHint": "Geavanceerde tekenvormen voor Sub Station Alpha"
+ },
+ "Waveform": {
+ "PlayPauseHint": "Afspelen/pauzeren {0}",
+ "PlayNextHint": "Speel volgende {0}",
+ "PlaySelectionHint": "Speelselectie {0}",
+ "SetStartAndOffsetTheRestHint": "Stel het begin van de huidige ondertitel in en verschuif de rest {0}",
+ "SetStartHint": "Begin van huidige ondertitel instellen {0}",
+ "SetEndHint": "Einde van huidige ondertitel instellen {0}",
+ "NewHint": "Nieuwe ondertitel invoegen op videopositie {0}",
+ "CenterWaveformHint": "Middengolfvorm op huidige videopositie tijdens afspelen {0}",
+ "ZoomHorizontalHint": "Horizontaal zoomen {0}",
+ "ZoomVerticalHint": "Verticaal zoomen {0}",
+ "SelectCurrentLineWhilePlayingHint": "Selecteer de huidige ondertitel tijdens het afspelen van {0}",
+ "VideoPosition": "Videopositie {0}",
+ "HideWaveformToolbar": "Werkbalk verbergen {0}",
+ "ResetZoomAndSpeed": "Zoom- en afspeelsnelheid opnieuw instellen {0}",
+ "RemoveBlankLines": "Verwijder lege regels {0}",
+ "PlaySelectedRepeatHint": "Geselecteerde ondertitel(s) afspelen in herhaalmodus {0}"
+ }
+ },
+ "File": {
+ "Compare": "",
+ "PreviousDifference": "",
+ "NextDifference": "",
+ "SubtitlesNotAlike": "",
+ "XNumberOfDifference": "",
+ "XNumberOfDifferenceAndPercentChanged": "",
+ "XNumberOfDifferenceAndPercentLettersChanged": "",
+ "ShowOnlyDifferences": "",
+ "IgnoreLineBreaks": "",
+ "IgnoreWhitespace": "",
+ "IgnoreFormatting": "",
+ "OnlyLookForDifferencesInText": "",
+ "CannotCompareWithImageBasedSubtitles": "",
+ "StatisticsTitle": "",
+ "ShowOnlyDifferencesInText": "",
+ "LoadXFromFile": "",
+ "SaveCompareHtmlTitle": "",
+ "PickMatroskaTrackX": "",
+ "RosettaProperties": "",
+ "RosettaFontSize": "",
+ "XProperties": "",
+ "EbuSaveOptions": {
+ "Title": "",
+ "GeneralSubtitleInformation": "",
+ "CodePageNumber": "",
+ "DiskFormatCode": "",
+ "DisplayStandardCode": "",
+ "ColorRequiresTeletext": "",
+ "AlignmentRequiresTeletext": "",
+ "TeletextCharsShouldBe38": "",
+ "CharacterCodeTable": "",
+ "LanguageCode": "",
+ "OriginalProgramTitle": "",
+ "OriginalEpisodeTitle": "",
+ "TranslatedProgramTitle": "",
+ "TranslatedEpisodeTitle": "",
+ "TranslatorsName": "",
+ "SubtitleListReferenceCode": "",
+ "CountryOfOrigin": "",
+ "TimeCodeStatus": "",
+ "TimeCodeStartOfProgramme": "",
+ "RevisionNumber": "",
+ "MaxNoOfDisplayableChars": "",
+ "MaxNumberOfDisplayableRows": "",
+ "DiskSequenceNumber": "",
+ "TotalNumberOfDisks": "",
+ "Import": "",
+ "TextAndTimingInformation": "",
+ "JustificationCode": "",
+ "VerticalPosition": "",
+ "MarginTop": "",
+ "MarginBottom": "",
+ "NewLineRows": "",
+ "Teletext": "",
+ "UseBox": "",
+ "DoubleHeight": "",
+ "Errors": "",
+ "ErrorsX": "",
+ "MaxLengthError": "",
+ "TextUnchangedPresentation": "",
+ "TextLeftJustifiedText": "",
+ "TextCenteredText": "",
+ "TextRightJustifiedText": "",
+ "UseBoxForOneNewLine": "",
+ "DiscSequenceNumber": ""
+ },
+ "Import": {
+ "ImportTimeCodes": "",
+ "PlainTextDotDotDot": "",
+ "TitleImportPlainText": "",
+ "ImagesForOcrDotDotDot": "",
+ "TimeCodesDotDotDot": "",
+ "SubtitleWithManuallyChosenEncodingDotDotDot": "",
+ "TitleImportImages": "",
+ "ImportFileLabel": "",
+ "ImportFilesInfo": "",
+ "FormattingDotDotDot": "",
+ "ImagedBasedSubtitleForEditDotDotDot": "",
+ "ImagedBasedSubtitleForOcrDotDotDot": "",
+ "SplitTextAt": "",
+ "BlankLines": "",
+ "OneLineIsOneSubtitle": "",
+ "TwoLinesAreOneSubtitle": "",
+ "ImportFilesDotDotDot": "",
+ "MultipleFiles": "",
+ "ImportOptions": "",
+ "AutoSplitText": "",
+ "LineMode": "",
+ "MaxLineLength": "",
+ "MaxLinesPerSubtitle": "",
+ "MinGapBetweenSubtitles": "",
+ "MergeShortLines": "",
+ "RemoveLinesWithoutLetters": "",
+ "SplitAtEndCharsSetting": "",
+ "TakeTimeFromCurrentFile": "",
+ "Fixed": "",
+ "NumberOfSubtitlesX": "",
+ "GapMs": "",
+ "UseFixedDuration": "",
+ "FixedDurationMs": "",
+ "AlignViaWhisper": ""
+ },
+ "Export": {
+ "ExportImagesProfiles": "",
+ "LeftRightMargin": "",
+ "TopBottomMargin": "",
+ "TitleExportBluRaySup": "",
+ "LineSpacingPercent": "",
+ "PaddingLeftRight": "",
+ "PaddingTopBottom": "",
+ "PreviewTitle": "",
+ "TitleExportVobSub": "",
+ "CustomTextFormatsDotDotDot": "",
+ "PlainTextDotDotDot": "",
+ "CustomTextFormats": "",
+ "TitleExportCustomFormat": "",
+ "EditCustomFormat": "",
+ "NewCustomFormat": "",
+ "DeleteSelectedCustomTextFormatX": "",
+ "TimeCodeFormat": "",
+ "NewLineFormat": "",
+ "PleaseEnterNameForTheCustomFormat": "",
+ "TitleExportPlainText": "",
+ "LineNumbers": "",
+ "ShowLineNumbers": "",
+ "AddNewLineAfterLineNumber": "",
+ "AddNewLineAfterTimeCode": "",
+ "AddNewLineAfterText": "",
+ "AddLineBetweenSubtitles": "",
+ "TitleExportDCinemaInteropPng": "",
+ "TitleExportDCinemaSmpte2014Png": "",
+ "ImageBasedSubtitleSaved": "",
+ "TitleExportBdnXml": "",
+ "TitleExportWebVttThumbnails": ""
+ },
+ "Statistics": {
+ "Title": "",
+ "TitleWithFileName": "",
+ "GeneralStatistics": "",
+ "MostUsed": "",
+ "MostUsedLines": "",
+ "MostUsedWords": "",
+ "NothingFound": "",
+ "NumberOfLinesX": "",
+ "NumberOfFilesX": "",
+ "LengthInFormatXinCharactersY": "",
+ "NumberOfCharactersInTextOnly": "",
+ "TotalDuration": "",
+ "TotalCharsPerSecond": "",
+ "TotalWords": "",
+ "NumberOfItalicTags": "",
+ "NumberOfBoldTags": "",
+ "NumberOfUnderlineTags": "",
+ "NumberOfFontTags": "",
+ "NumberOfAlignmentTags": "",
+ "LineLengthMinimum": "",
+ "LineLengthMaximum": "",
+ "LineLengthAverage": "",
+ "LinesPerSubtitleAverage": "",
+ "SingleLineLengthMinimum": "",
+ "SingleLineLengthMaximum": "",
+ "SingleLineLengthAverage": "",
+ "SingleLineLengthExceedingMaximum": "",
+ "SingleLineWidthMinimum": "",
+ "SingleLineWidthMaximum": "",
+ "SingleLineWidthAverage": "",
+ "SingleLineWidthExceedingMaximum": "",
+ "DurationMinimum": "",
+ "DurationMaximum": "",
+ "DurationAverage": "",
+ "DurationExceedingMinimum": "",
+ "DurationExceedingMaximum": "",
+ "CharactersPerSecondMinimum": "",
+ "CharactersPerSecondMaximum": "",
+ "CharactersPerSecondAverage": "",
+ "CharactersPerSecondExceedingOptimal": "",
+ "CharactersPerSecondExceedingMaximum": "",
+ "WordsPerMinuteMinimum": "",
+ "WordsPerMinuteMaximum": "",
+ "WordsPerMinuteAverage": "",
+ "WordsPerMinuteExceedingMaximum": "",
+ "GapMinimum": "",
+ "GapMaximum": "",
+ "GapAverage": "",
+ "GapExceedingMinimum": "",
+ "Export": ""
+ },
+ "ManualChosenEncoding": {
+ "Title": "",
+ "SearchEncodings": "",
+ "CodePage": ""
+ },
+ "RestoreAutoBackup": {
+ "Title": "",
+ "OpenAutoBackupFolder": "",
+ "RestoreAutoBackupFile": "",
+ "DeleteAllSubtitleBackups": "",
+ "DeleteAll": ""
+ },
+ "PropertiesDCinema": {
+ "Title": "",
+ "GenerateIdAuto": "",
+ "SubtitleId": "",
+ "GenerateId": "",
+ "MovieTitle": "",
+ "ReelNumber": "",
+ "IssueDate": "",
+ "Now": "",
+ "EditRate": "",
+ "TimeCodeRate": "",
+ "StartTime": "",
+ "Font": "",
+ "FontId": "",
+ "FontUri": "",
+ "Generate": "",
+ "FontColor": "",
+ "ChooseColor": "",
+ "FontEffect": "",
+ "EffectColor": "",
+ "FontSize": "",
+ "TopBottomMargin": "",
+ "FadeUpTime": "",
+ "FadeDownTime": "",
+ "Frames": "",
+ "Export": ""
+ }
+ },
+ "Edit": {
+ "ShowHistory": "",
+ "RestoreSelected": "",
+ "ModifySelection": {
+ "Title": "",
+ "Contains": "",
+ "StartsWith": "",
+ "EndsWith": "",
+ "NotContains": "",
+ "AllUppercase": "",
+ "Odd": "",
+ "Even": "",
+ "DurationLessThan": "",
+ "DurationGreaterThan": "",
+ "CpsLessThan": "",
+ "CpsGreaterThan": "",
+ "LengthLessThan": "",
+ "LengthGreaterThan": "",
+ "PixelLengthGreaterThan": "",
+ "GapLessThan": "",
+ "GapGreaterThan": "",
+ "ExactlyOneLine": "",
+ "ExactlyTwoLines": "",
+ "MoreThanTwoLines": "",
+ "Bookmarked": "",
+ "BookmarkContains": "",
+ "BlankLines": "",
+ "SelectionNew": "",
+ "SelectionAdd": "",
+ "SelectionSubtract": "",
+ "SelectionIntersect": ""
+ },
+ "MultipleReplace": {
+ "Title": "",
+ "EditRule": "",
+ "NewRule": "",
+ "EditCategory": "",
+ "NewCategory": "",
+ "CategoryName": "",
+ "ExportReplaceRules": "",
+ "AppliedRules": "",
+ "FindRule": "",
+ "XLinesAffected": "",
+ "DeleteCategoryConfirm": "",
+ "DeleteRuleConfirm": "",
+ "FindWhat": "",
+ "DescriptionOptional": ""
+ },
+ "Find": {
+ "SearchTextWatermark": "Tekst zoeken...",
+ "WholeWord": "Hele 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..."
+ }
+ },
+ "Tools": {
+ "PickAlignmentTitle": "",
+ "PickFontNameTitle": "",
+ "ColorPickerTitle": "",
+ "FilterLayersTitle": "",
+ "FilterLayersHideFromWaveform": "",
+ "FilterLayersHideFromSubtitleGrid": "",
+ "FilterLayersHideFromVideoPreview": "",
+ "PickSubtitleFormat": "",
+ "PickLayerTitle": "",
+ "RecentColors": "",
+ "FixCommonErrors": {
+ "Title": "",
+ "Step1": "",
+ "WhatToFix": "",
+ "Example": "",
+ "SelectAll": "",
+ "InverseSelection": "",
+ "Back": "",
+ "Next": "",
+ "Step2": "",
+ "Fixes": "",
+ "Log": "",
+ "Function": "",
+ "RemovedEmptyLine": "",
+ "RemovedEmptyLineAtTop": "",
+ "RemovedEmptyLineAtBottom": "",
+ "RemovedEmptyLineInMiddle": "",
+ "RemovedEmptyLinesUnusedLineBreaks": "",
+ "FixOverlappingDisplayTimes": "",
+ "FixShortDisplayTimes": "",
+ "FixLongDisplayTimes": "",
+ "FixShortGaps": "",
+ "FixInvalidItalicTags": "",
+ "RemoveUnneededSpaces": "",
+ "RemoveUnneededPeriods": "",
+ "FixCommas": "",
+ "FixMissingSpaces": "",
+ "BreakLongLines": "",
+ "RemoveLineBreaks": "",
+ "RemoveLineBreaksAll": "",
+ "RemoveLineBreaksPixelWidth": "",
+ "FixUppercaseIInsideLowercaseWords": "",
+ "FixDoubleApostrophes": "",
+ "AddPeriods": "",
+ "StartWithUppercaseLetterAfterParagraph": "",
+ "StartWithUppercaseLetterAfterPeriodInsideParagraph": "",
+ "StartWithUppercaseLetterAfterColon": "",
+ "FixLowercaseIToUppercaseI": "",
+ "FixCommonOcrErrors": "",
+ "CommonOcrErrorsFixed": "",
+ "RemoveSpaceBetweenNumber": "",
+ "BreakDialogsOnOneLine": "",
+ "RemoveDialogFirstInNonDialogs": "",
+ "NormalizeStrings": "",
+ "FixTurkishAnsi": "",
+ "FixDanishLetterI": "",
+ "FixSpanishInvertedQuestionAndExclamationMarks": "",
+ "AddMissingQuote": "",
+ "AddMissingQuotes": "",
+ "RemoveHyphensSingleLine": "",
+ "FixHyphensInDialogs": "",
+ "AddMissingQuotesExample": "",
+ "XMissingQuotesAdded": "",
+ "Fix3PlusLine": "",
+ "Fix3PlusLines": "",
+ "Analysing": "",
+ "NothingToFix": "",
+ "FixesFoundX": "",
+ "XFixesApplied": "",
+ "NothingFixableBut": "",
+ "XFixedBut": "",
+ "XCouldBeFixedBut": "",
+ "FixFirstLetterToUppercaseAfterParagraph": "",
+ "MergeShortLine": "",
+ "MergeShortLineAll": "",
+ "UnbreakShortLinePixelWidth": "",
+ "BreakLongLine": "",
+ "FixLongDisplayTime": "",
+ "FixInvalidItalicTag": "",
+ "FixShortDisplayTime": "",
+ "FixOverlappingDisplayTime": "",
+ "FixShortGap": "",
+ "FixInvalidItalicTagsExample": "",
+ "RemoveUnneededSpacesExample": "",
+ "RemoveUnneededPeriodsExample": "",
+ "FixMissingSpacesExample": "",
+ "FixUppercaseIInsideLowercaseWordsExample": "",
+ "FixLowercaseIToUppercaseIExample": "",
+ "StartTimeLaterThanEndTime": "",
+ "UnableToFixStartTimeLaterThanEndTime": "",
+ "XFixedToYZ": "",
+ "UnableToFixTextXY": "",
+ "UnneededSpace": "",
+ "UnneededPeriod": "",
+ "FixMissingSpace": "",
+ "FixUppercaseIInsideLowercaseWord": "",
+ "FixMissingPeriodAtEndOfLine": "",
+ "RefreshFixes": "",
+ "ApplyFixes": "",
+ "AutoBreak": "",
+ "Unbreak": "",
+ "FixDoubleDash": "",
+ "FixDoubleGreaterThan": "",
+ "FixEllipsesStart": "",
+ "FixMissingOpenBracket": "",
+ "FixMusicNotation": "",
+ "FixDoubleDashExample": "",
+ "FixDoubleGreaterThanExample": "",
+ "FixEllipsesStartExample": "",
+ "FixMissingOpenBracketExample": "",
+ "FixMusicNotationExample": "",
+ "NumberOfImportantLogMessages": "",
+ "FixedOkXY": "",
+ "FixOcrErrorExample": "",
+ "FixSpaceBetweenNumbersExample": "",
+ "FixDialogsOneLineExample": "",
+ "RemoveDialogFirstInNonDialogsExample": "",
+ "SelectDefault": "",
+ "SetDefault": "",
+ "FixContinuationStyleX": "",
+ "FixUnnecessaryLeadingDots": "",
+ "FixCommonErrorsProfiles": "",
+ "FixCommonOcrErrorsStep1": "",
+ "SearchRulesDotDotDot": "",
+ "GoToApplyFixes": "",
+ "BackToFixList": "",
+ "ApplyFixesAndClose": "",
+ "FixCommonOcrErrorsStep2": "",
+ "FixCommonOcrErrorsStep2FixesFoundX": "",
+ "Action": "",
+ "ApplySelectedFixes": ""
+ },
+ "AdjustDurations": {
+ "Title": "",
+ "AdjustVia": "",
+ "Seconds": "",
+ "Percent": "",
+ "Recalculate": "",
+ "AddSeconds": "",
+ "SetAsPercent": "",
+ "Note": "",
+ "Fixed": "",
+ "Milliseconds": "",
+ "ExtendOnly": "",
+ "EnforceDurationLimits": "",
+ "CheckShotChanges": "",
+ "BatchCheckShotChanges": ""
+ },
+ "ApplyDurationLimits": {
+ "Title": "",
+ "FixMinDurationMs": "",
+ "DoNotGoPastShotChange": "",
+ "FixMaxDurationMs": "",
+ "MaxDurationShouldBeHigherThanMinDuration": "",
+ "ChangedDurationFromXToYCommentZ": "",
+ "OnlyPartialFixed": "",
+ "UnfixableX": "",
+ "FixedX": "",
+ "FixedXImprovedY": "",
+ "NoChangesNeeded": ""
+ },
+ "ApplyMinGaps": {
+ "Title": "",
+ "NumberOfGapsFixedX": "",
+ "MinFramesBetweenLines": "",
+ "MinMsBetweenLines": "",
+ "ChangedGapFromXToYCommentZ": ""
+ },
+ "BeautifyTimeCodes": {
+ "Title": "",
+ "BeautifySettings": "",
+ "SnapToFrames": "",
+ "FrameGap": "",
+ "MinDuration": "",
+ "ShotChangeThreshold": "",
+ "ShotChangeOffset": "",
+ "Original": "",
+ "Beautified": ""
+ },
+ "BridgeGaps": {
+ "Title": "",
+ "BridgeGapsSmallerThan": "",
+ "MinGap": "",
+ "NumberOfSmallGapsBridgedX": "",
+ "PercentFoPrevious": "",
+ "GapChange": ""
+ },
+ "Renumber": {
+ "Title": "",
+ "StartFromNumber": ""
+ },
+ "SortBy": {
+ "Title": "",
+ "SortOrder": ""
+ },
+ "BatchConvert": {
+ "Title": "",
+ "OneActionsSelected": "",
+ "XActionsSelected": "",
+ "OutputFolderSource": "",
+ "OutputFolderX": "",
+ "EncodingXOverwriteY": "",
+ "TargetFormatSettings": "",
+ "FileNameContainsDotDotDot": "",
+ "TrackLanguageContainsDotDotDot": "",
+ "BatchConvertSettings": "",
+ "AddFormatting": "",
+ "AddItalic": "",
+ "AddBold": "",
+ "AddUnderline": "",
+ "AddAlignment": "",
+ "AddColor": "",
+ "DeleteLinesWithSpecificActorsOrStyles": "",
+ "UseSourceStylesIfPossible": "",
+ "EditStyles": "",
+ "EditProperties": "",
+ "EditAttachments": "",
+ "ErrorsExportedX": "",
+ "SlowFontSizeChange": "",
+ "IncreaseFontKerning": "",
+ "ScrollUp": "",
+ "ScrollDown": "",
+ "RotateIn": "",
+ "TiltBounce": "",
+ "FontSizeBounceIn": ""
+ },
+ "ChangeCasing": {
+ "Title": "",
+ "FixNames": "",
+ "ExtraNames": "",
+ "EnterExtraNamesHint": "",
+ "OnlyFixUppercaseLines": "",
+ "FixNamesOnly": "",
+ "AllUppercase": "",
+ "AllLowercase": ""
+ },
+ "ChangeFormatting": {
+ "Title": ""
+ },
+ "ConvertActors": {
+ "Title": "",
+ "ConvertActorFrom": "",
+ "ConvertActorTo": "",
+ "InlineActorViaX": "",
+ "SetColor": "",
+ "OnlyNames": "",
+ "NumberOfConversionsX": ""
+ },
+ "JoinSubtitles": {
+ "Title": "",
+ "KeepTimeCodes": "",
+ "AppendTimeCodes": "",
+ "AddMsAfterEachFile": "",
+ "Join": ""
+ },
+ "SplitSubtitle": {
+ "Title": "",
+ "NumberOfEqualParts": "",
+ "SaveSplitParts": "",
+ "SubtitleSplitIntoXParts": "",
+ "XPartsSavedInFormatYToFolder": ""
+ },
+ "SplitBreakLongLines": {
+ "Title": "",
+ "SplitLongLines": "",
+ "RebalanceLongLines": "",
+ "SplitLongLine": "",
+ "RebalanceLongLine": "",
+ "SplitIntoXLines": "",
+ "LinesSplitX": "",
+ "LinesSplitXLinesRebalancedY": ""
+ },
+ "MergeShortLines": {
+ "Title": "",
+ "HighlightParts": "",
+ "MergedLineInfo": "",
+ "LinesMergedX": ""
+ },
+ "MergeLinesWithSameText": {
+ "Title": "",
+ "MaxMsBetweenLines": "",
+ "IncludeIncrementingLines": ""
+ },
+ "MergeLinesWithSameTimeCodes": {
+ "Title": "",
+ "MaxMsDifference": "",
+ "MakeDialog": ""
+ },
+ "NetflixCheckAndFix": {
+ "Title": "",
+ "GenerateReport": "",
+ "NothingToReport": "",
+ "SaveNetflixQualityReport": "",
+ "NetflixReportSaved": "",
+ "NetFlixQualityReportSavedToX": "",
+ "DialogHyphenSpace": "",
+ "EllipsesNotThreeDots": "",
+ "OnlyAllowedGlyphs": "",
+ "Italics": "",
+ "MaxCharsSec": "",
+ "MaxDuration": "",
+ "MaxLineLength": "",
+ "MinDuration": "",
+ "MaxNumberOfLines": "",
+ "OneToTenSpellOut": "",
+ "ShotChanges": "",
+ "StartNumberSpellOut": "",
+ "TextforHiUseBrackets": "",
+ "FrameRate": "",
+ "TwoFrameGrap": "",
+ "WhiteSpace": ""
+ },
+ "ImageBasedEdit": {
+ "EditImagedBaseSubtitle": "",
+ "EditImagedBaseSubtitleX": "",
+ "ResizeImagesDotDotDot": "",
+ "AdjustBrightnessDotDotDot": "",
+ "AdjustAlphaDotDotDot": "",
+ "CenterHorizontally": "",
+ "CropImages": "",
+ "ImportTimeCodes": "",
+ "SetTextForSubtitle": "",
+ "ScreenWidth": "",
+ "ScreenHeight": "",
+ "AlphaThresholdInfo": "",
+ "ResetToDefaults": "",
+ "AlphaAdjustmentInfo": "",
+ "AdjustBrightness": "",
+ "Brightness": "",
+ "Contrast": "",
+ "Gamma": "",
+ "BrightnessAdjustmentInfo": "",
+ "ResizeImages": "",
+ "Percentage": "",
+ "ResizeImagesInfo": ""
+ },
+ "RemoveTextForHearingImpaired": {
+ "Title": "",
+ "Interjections": "",
+ "SkipIfStartWith": "",
+ "RemoveTextBetween": "",
+ "Brackets": "",
+ "CurlyBrackets": "",
+ "Parentheses": "",
+ "And": "",
+ "OnlySeparateLines": "",
+ "RemoveTextBeforeColon": "",
+ "OnlyIfTextIsUppercase": "",
+ "OnlyOnSeparateLine": "",
+ "IfLineIsUppercase": "",
+ "IfLineContains": "",
+ "IfLineOnlyContainsMusicSymbols": "",
+ "RemoveInterjections": ""
+ }
+ },
+ "SpellCheck": {
+ "SpellCheck": "",
+ "GetDictionariesTitle": "",
+ "GetDictionaryInstructions": "",
+ "AddNameToUserDictionary": "",
+ "AddNameToNamesList": "",
+ "NoDictionariesFound": "",
+ "WordNotFound": "",
+ "LineXofY": "",
+ "ChangeWordFromXToY": "",
+ "ChangeAllWordsFromXToY": "",
+ "IgnoreWordXOnce": "",
+ "IgnoreWordXAlways": "",
+ "WordXAddedToNamesList": "",
+ "WordXAddedToUserDictionary": "",
+ "UseSuggestionX": "",
+ "UseSuggestionXAlways": "",
+ "AddXToUserDictionary": "",
+ "IgnoreAllX": "",
+ "PickSpellCheckDictionaryDotDotDot": "",
+ "ChooseSpellCheckDictionary": ""
+ },
+ "Video": {
+ "GoToVideoPosition": "",
+ "GenerateBlankVideoDotDotDot": "",
+ "GenerateBlankVideoTitle": "",
+ "ReEncodeVideoForBetterSubtitlingTitle": "",
+ "ReEncodeVideoForBetterSubtitlingDotDotDot": "",
+ "OpenSecondarySubtitleOnVideoPlayerDotDotDot": "",
+ "OpenSecondarySubtitleOnVideoPlayer": "",
+ "RemoveSecondarySubtitleOnVideoPlayer": "",
+ "CutVideoTitle": "",
+ "CutVideoDotDotDot": "",
+ "EmbedSubtitlesDotDotDot": "",
+ "GenerateTimeCodes": "",
+ "CheckeredImage": "",
+ "SaveVideoAsTitle": "",
+ "PromptForFfmpegParamsAndGenerate": "",
+ "CutVideoCutSegments": "",
+ "CutVideoMergeSegments": "",
+ "CutVideoSplitSegments": "",
+ "CutVideoType": "",
+ "MpvRenderAuto": "",
+ "MpvRenderNative": "",
+ "MpvRenderOpenGl": "",
+ "MpvRenderSoftware": "",
+ "ImportCurrentSubtitle": "",
+ "AddRemoveEmbeddedSubtitlesTitle": "",
+ "AddCurrentSubtitle": "",
+ "TitleOrLanguage": "",
+ "ViewMatroskaTrackX": "",
+ "ResolutionSeparator": "",
+ "OpenFromUrlTitle": "",
+ "BurnIn": {
+ "Title": "",
+ "InfoAssaOff": "",
+ "InfoAssaOn": "",
+ "XGeneratedWithBurnedInSubsInX": "",
+ "TimeRemainingMinutes": "",
+ "TimeRemainingOneMinute": "",
+ "TimeRemainingSeconds": "",
+ "TimeRemainingAFewSeconds": "",
+ "TimeRemainingMinutesAndSeconds": "",
+ "TimeRemainingOneMinuteAndSeconds": "",
+ "TargetFileName": "",
+ "TargetFileSize": "",
+ "FileSizeMb": "",
+ "PassX": "",
+ "Encoding": "",
+ "BitRate": "",
+ "TotalBitRateX": "",
+ "SampleRate": "",
+ "Audio": "",
+ "Stereo": "",
+ "Preset": "",
+ "PixelFormat": "",
+ "Crf": "",
+ "TuneFor": "",
+ "AlignRight": "",
+ "GetStartPosition": "",
+ "GetEndPosition": "",
+ "UseSource": "",
+ "UseSourceFolder": "",
+ "UseSourceResolution": "",
+ "OutputSettings": "",
+ "FontSizeFactor": "",
+ "BoxType": "",
+ "FixRightToLeft": "",
+ "Cut": "",
+ "FromTime": "",
+ "ToTime": "",
+ "AudioEncoding": "",
+ "OutputProperties": "",
+ "VideoFileSize": "",
+ "OneBox": "",
+ "BoxPerLine": "",
+ "LogoInfo": ""
+ },
+ "VideoTransparent": {
+ "Title": "",
+ "InfoAssaOff": "",
+ "InfoAssaOn": ""
+ },
+ "AudioToText": {
+ "Title": "",
+ "Transcribe": "",
+ "TranslateToEnglish": "",
+ "Transcribing": "",
+ "TranscribingXOfY": "",
+ "InputLanguage": "",
+ "AdvancedWhisperSettings": "",
+ "DownloadingWhisperEngine": "",
+ "EnableVad": "",
+ "WhisperXxlStandard": "",
+ "WhisperXxlStandardAsia": "",
+ "WhisperXxlSentence": "",
+ "WhisperXxlSingleWords": "",
+ "WhisperXxlHighlightWord": "",
+ "SelectModel": "",
+ "ViewWhisperLogFile": "",
+ "ReDownloadX": "",
+ "DownloadingSpeechToTextModel": "",
+ "WhisperPostProcessingTitle": "",
+ "AdjustTimings": "",
+ "MergeShortLines": "",
+ "BreakSplitLongLines": "",
+ "FixShortDuration": "",
+ "FixCasing": "",
+ "AddPeriods": "",
+ "ChangeUnderlineToColor": ""
+ },
+ "TextToSpeech": {
+ "Title": "",
+ "TextToSpeechEngine": "",
+ "ReviewAudioSegments": "",
+ "ReviewAudioSegmentsHistory": "",
+ "Stability": "",
+ "Similarity": "",
+ "SpeakerBoost": "",
+ "StyleExaggeration": "",
+ "RegenerateAudioSelectedLine": "",
+ "GenerateSpeechFromText": "",
+ "TestVoice": "",
+ "AddAudioToVideoFile": "",
+ "VoiceSettings": "",
+ "VoiceSampleText": "",
+ "RefreshVoices": "",
+ "VideoEncodingSettings": "",
+ "ElevenLabsSettings": "",
+ "ElevenLabsSettingsResetHint": "",
+ "RegenerateAudio": "",
+ "AutoContinuePlaying": "",
+ "AddingAudioToVideoFileDotDotDot": "",
+ "PreparingMergeDotDotDot": "",
+ "ImportVoiceDotDotDot": "",
+ "VoiceImportSuccessTitle": "",
+ "VoiceXImported": "",
+ "AdvancedTtsSettings": "",
+ "ProAudioPostProcessing": "",
+ "ProAudioPostProcessingDescription": "",
+ "AudioDucking": "",
+ "AudioDuckingDescription": "",
+ "OriginalVolumePercent": "",
+ "VadSilenceCompression": "",
+ "VadSilenceCompressionDescription": "",
+ "MaxSilenceMs": "",
+ "HighQualityTimeStretch": "",
+ "HighQualityTimeStretchDescription": "",
+ "SilencePaddingMs": "",
+ "SilencePaddingMsDescription": "",
+ "OutputSampleRate": "",
+ "OutputSampleRateDescription": "",
+ "EdgeTtsRate": "",
+ "EdgeTtsRateDescription": "",
+ "EdgeTtsPitch": "",
+ "EdgeTtsPitchDescription": "",
+ "EdgeTtsVolume": "",
+ "EdgeTtsVolumeDescription": "",
+ "DownloadPiperPrompt": ""
+ },
+ "ShotChanges": {
+ "TitleGenerateOrImport": "",
+ "GenerateShotChanges": "",
+ "ImportShotChanges": "",
+ "GenerateShotChangesWithFfmpeg": "",
+ "ShotChangeTimeCode": "",
+ "OpenShotChangesFile": "",
+ "ImportShotChangesFromFile": "",
+ "TimeCodeFormatColon": "",
+ "ShotChangesList": "",
+ "ShotChangesClearQuestion": "",
+ "DeleteSelectedShotChangeQuestion": ""
+ }
+ },
+ "Waveform": {
+ "GuessTimeCodes": "",
+ "GuessTimeCodesScanBlockSize": "",
+ "GuessTimeCodesScanBlockAverageMin": "",
+ "GuessTimeCodesScanBlockAverageMax": "",
+ "GuessTimeCodesSplitLongSubtitlesAt": "",
+ "SpeechToTextSelectedLinesDotDotDot": "",
+ "SeekSilence": "",
+ "MinSilenceDurationSeconds": "",
+ "MaxSilenceVolume": "",
+ "GuessTimeCodesDotDotDot": "",
+ "SeekSilenceDotDotDot": "",
+ "ToggleShotChange": "",
+ "ResetWaveformZoomAndSpeed": "",
+ "ShowOnlyWaveform": "",
+ "ShowOnlySpectrogram": "",
+ "ShowWaveformAndSpectrogram": "",
+ "SpectrogramClassic": "",
+ "SpectrogramClassicViridis": "",
+ "SpectrogramClassicPlasma": "",
+ "SpectrogramClassicInferno": "",
+ "SpectrogramClassicTurbo": "",
+ "SpectrogramNeon": "",
+ "WaveformDrawStyleClassic": "",
+ "WaveformDrawStyleFancy": "",
+ "SetVideoPositionAndPauseAndSelectSubtitle": "",
+ "SetVideopositionAndPauseAndSelectSubtitleAndCenter": "",
+ "SetVideoPositionAndPause": "",
+ "SetVideopositionAndPauseAndCenter": "",
+ "SetVideoposition": ""
+ },
+ "Sync": {
+ "VisualSync": "",
+ "Sync": "",
+ "StartScene": "",
+ "EndScene": "",
+ "PlayTwoSecondsAndBack": "",
+ "FindText": "",
+ "ResolutionXDurationYFrameRateZ": "",
+ "StartSceneMustComeBeforeEndScene": "",
+ "GoToSubPos": "",
+ "SpeedInPercentage": "",
+ "FromDropFrameValue": "",
+ "ToDropFrameValue": "",
+ "AdjustAll": "",
+ "AdjustSelectedLines": "",
+ "AdjustSelectedLinesAndForward": "",
+ "ToFrameRate": "",
+ "FromFrameRate": "",
+ "AdjustAllTimes": "",
+ "ShowEarlier": "",
+ "ShowLater": "",
+ "ChangeFrameRate": "",
+ "SetSyncPoint": "",
+ "SyncPoints": "",
+ "PointSync": "",
+ "PointSyncViaOther": "",
+ "AdjustmentX": "",
+ "AdjustAllShortcuts": "",
+ "OffsetInSeconds": "",
+ "SpeedFactor": ""
+ },
+ "Translate": {
+ "TranslateViaCopyPaste": "",
+ "MaxBlockSize": "",
+ "LineSeparator": "",
+ "BlockCopyInfo": "",
+ "BlockCopyGetFromClipboard": "",
+ "ReCopyTextToClipboard": "",
+ "BlockXOfY": "",
+ "NoTextInClipboard": "",
+ "TextInClipboardIsSameAsSourceText": "",
+ "LineMerge": "",
+ "DelayInSecondsBetweenRequests": "",
+ "MaxBytesPerRequest": "",
+ "PromptText": "",
+ "TranslateEachLineSeparately": ""
+ },
+ "Options": {
+ "Settings": {
+ "DialogStyle": "",
+ "DialogStyleDashSecondLineWithoutSpace": "",
+ "DialogStyleDashSecondLineWithSpace": "",
+ "DialogStyleDashBothLinesWithSpace": "",
+ "DialogStyleDashBothLinesWithoutSpace": "",
+ "ContinuationStyle": "",
+ "ContinuationStyleNone": "",
+ "ContinuationStyleNoneTrailingDots": "",
+ "ContinuationStyleNoneLeadingTrailingDots": "",
+ "ContinuationStyleNoneTrailingEllipsis": "",
+ "ContinuationStyleNoneLeadingTrailingEllipsis": "",
+ "ContinuationStyleOnlyTrailingDots": "",
+ "ContinuationStyleLeadingTrailingDots": "",
+ "ContinuationStyleOnlyTrailingEllipsis": "",
+ "ContinuationStyleLeadingTrailingEllipsis": "",
+ "ContinuationStyleLeadingTrailingDash": "",
+ "ContinuationStyleLeadingTrailingDashDots": "",
+ "ContinuationStyleCustom": "",
+ "CpsLineLengthStyle": "",
+ "CpsLineLengthStyleCalcAll": "",
+ "CpsLineLengthStyleCalcNoSpaceCpsOnly": "",
+ "CpsLineLengthStyleCalcNoSpace": "",
+ "CpsLineLengthStyleCalcCjk": "",
+ "CpsLineLengthStyleCalcCjkNoSpace": "",
+ "CpsLineLengthStyleCalcIncludeCompositionCharacters": "",
+ "CpsLineLengthStyleCalcIncludeCompositionCharactersNotSpace": "",
+ "CpsLineLengthStyleCalcNoSpaceOrPunctuation": "",
+ "CpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "",
+ "CpsLineLengthStyleCalcIgnoreArabicDiacritics": "",
+ "CpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "",
+ "TimeCodeModeHhMmSsMs": "",
+ "TimeCodeModeHhMmSsFf": "",
+ "SplitBehaviorPrevious": "",
+ "SplitBehaviorHalf": "",
+ "SplitBehaviorNext": "",
+ "SubtitleListActionNothing": "",
+ "SubtitleListActionVideoGoToPositionAndPause": "",
+ "SubtitleListActionVideoGoToPositionAndPlay": "",
+ "SubtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "",
+ "SubtitleListActionEditText": "",
+ "SubtitleListActionVideoGoToPositionMinus1SecAndPause": "",
+ "SubtitleListActionVideoGoToPositionMinusHalfSecAndPause": "",
+ "SubtitleListActionVideoGoToPositionMinus1SecAndPlay": "",
+ "SubtitleListActionEditTextAndPause": "",
+ "AutoBackupEveryMinute": "",
+ "AutoBackupEveryXthMinute": "",
+ "Profiles": "",
+ "AutoBackupDeleteAfterXMonths": "",
+ "SearchSettingsDotDoDot": "",
+ "SyntaxColoring": "",
+ "WaveformSpectrogram": "",
+ "Network": "",
+ "FileTypeAssociations": "",
+ "TextBoxColorTags": "",
+ "TextBoxLiveSpellCheck": "",
+ "TextBoxCenterText": "",
+ "TextBoxFontBold": "",
+ "TextBoxFontSize": "",
+ "SubtitleTextBoxAndGridFontName": "",
+ "SubtitleGridFontSize": "",
+ "SubtitleGridTextSingleLine": "",
+ "SubtitleGridLiveSpellCheck": "",
+ "SubtitleGridShowFormatting": "",
+ "ShowUpDownStartTime": "",
+ "ShowUpDownEndTime": "",
+ "ShowUpDownDuration": "",
+ "ShowUpDownLabels": "",
+ "ShowButtonHints": "",
+ "GridCompactMode": "",
+ "UiFont": "",
+ "Theme": "",
+ "IconTheme": "",
+ "DarkThemeForegroundColor": "",
+ "DarkThemeBackgroundColor": "",
+ "ShowGridLines": "",
+ "ResetSettings": "",
+ "ResetSettingsDetail": "",
+ "ShowHorizontalLineAboveToolbar": "",
+ "BookmarkColor": "",
+ "SingleLineMaxLength": "",
+ "OptimalCharsPerSec": "",
+ "MaxCharsPerSec": "",
+ "MaxWordsPerMin": "",
+ "MinDurationMs": "",
+ "MaxDurationMs": "",
+ "MinGapMs": "",
+ "MaxLines": "",
+ "UnbreakSubtitlesShortThan": "",
+ "NewEmptyDefaultMs": "",
+ "PromptBeforeDelete": "",
+ "RememberPositionAndSize": "",
+ "AutoBackupOn": "",
+ "AutoBackupIntervalMinutes": "",
+ "AutoBackupDeleteAfterDays": "",
+ "AutoConvertToUtf8": "",
+ "AutoTrimWhiteSpace": "",
+ "DefaultEncoding": "",
+ "ColorDurationTooShort": "",
+ "ColorDurationTooLong": "",
+ "ColorTextTooLong": "",
+ "ColorTextTooWide": "",
+ "ColorTextTooManyLines": "",
+ "ColorOverlap": "",
+ "ColorGapTooShort": "",
+ "ErrorBackgroundColor": "",
+ "WaveformDrawGridLines": "",
+ "WaveformCenterVideoPosition": "",
+ "WaveformShowToolbar": "",
+ "WaveformShowToolbarEdit": "",
+ "WaveformSpectrogramCombinedWaveformHeight": "",
+ "ShowWaveformToolbarPlay": "",
+ "ShowWaveformToolbarRepeat": "",
+ "ShowWaveformToolbarRemoveBlankLines": "",
+ "ShowWaveformToolbarNew": "",
+ "ShowWaveformToolbarSetStart": "",
+ "ShowWaveformToolbarSetEnd": "",
+ "ShowWaveformToolbarStartAndOffsetTheRest": "",
+ "ShowWaveformToolbarHorizontalZoom": "",
+ "ShowWaveformToolbarVerticalZoom": "",
+ "ShowWaveformToolbarVideoPositionSlider": "",
+ "ShowWaveformToolbarPlaybackSpeed": "",
+ "WaveformFocusTextboxAfterInsertNew": "",
+ "WaveformInvertMouseWheel": "",
+ "WaveformSnapToShotChanges": "",
+ "WaveformShotChangesAutoGenerate": "",
+ "WaveformTextFontSize": "",
+ "WaveformTextFontBold": "",
+ "WaveformTextColor": "",
+ "WaveformColor": "",
+ "WaveformBackgroundColor": "",
+ "WaveformSelectedColor": "",
+ "DownloadFfmpeg": "",
+ "ShowToolbarNew": "",
+ "ShowToolbarOpen": "",
+ "ShowToolbarVideoFileOpen": "",
+ "ShowToolbarSave": "",
+ "ShowToolbarSaveAs": "",
+ "ShowToolbarFind": "",
+ "ShowToolbarReplace": "",
+ "ShowToolbarSpellCheck": "",
+ "ShowToolbarFixCommonErrors": "",
+ "ShowToolbarSettings": "",
+ "ShowToolbarLayout": "",
+ "ShowToolbarHelp": "",
+ "ShowToolbarEncoding": "",
+ "ShowToolbarFrameRate": "",
+ "ProxyAddress": "",
+ "Username": "",
+ "Password": "",
+ "DefaultFormat": "",
+ "DefaultSaveAsFormat": "",
+ "FavoriteSubtitleFormats": "",
+ "ShowStopButton": "",
+ "ShowFullscreenButton": "",
+ "AutoOpenVideoFile": "",
+ "DownloadMpv": "",
+ "DownloadVlc": "",
+ "GoToLineNumberSetsVideoPosition": "",
+ "AdjustAllTimesRememberLineSelectionChoice": "",
+ "FilesAndLogs": "",
+ "ShowErrorLogFile": "",
+ "ShowWhisperLogFile": "",
+ "ShowSettingsFile": "",
+ "ShowAssaLayer": "",
+ "WaveformCursorColor": "",
+ "WaveformParagraphLeftColor": "",
+ "WaveformParagraphRightColor": "",
+ "WaveformFancyHighColor": "",
+ "WaveformFocusOnMouseOver": "",
+ "ResetAllSettings": "",
+ "ResetShortcuts": "",
+ "ResetRecentFiles": "",
+ "ResetMultipleReplaceRules": "",
+ "ResetAppearance": "",
+ "ResetAutoTranslate": "",
+ "ResetWindowPositionAndSize": "",
+ "ResetSettingsTitle": "",
+ "OpenRuleFile": "",
+ "ExportProfiles": "",
+ "SaveRuleProfilesFile": "",
+ "RuleProfilesExportedX": "",
+ "RuleProfilesImportedX": "",
+ "UseSpecialStyleAfterLongGaps": "",
+ "AddSpace": "",
+ "ProcessIfEndsWithComma": "",
+ "RemoveComma": "",
+ "EditContinuationStyleCustom": "",
+ "LongGapThreshold": "",
+ "AfterLongGap": "",
+ "ResetSyntaxColoring": "",
+ "ResetWaveform": "",
+ "ResetRules": "",
+ "UseFrameMode": "",
+ "TextBoxLimitNewLines": "",
+ "MpvVideoOutput": "",
+ "MpvOpenGl": "",
+ "MpvSoftwareRendering": "",
+ "MpvWidRendering": "",
+ "WaveFormsAndSpectrogramFoldersContainsX": "",
+ "DeleteWaveformAndSpectrogramFoldersQuestion": "",
+ "WaveformGenerateSpectrogram": "",
+ "WaveformSpectrogramMode": "",
+ "WaveformCenterOnSingleClick": "",
+ "WaveformSingleClickSelectsSubtitle": "",
+ "WaveformRightClickSelectsSubtitle": "",
+ "WaveformPauseOnSingleClick": "",
+ "WaveformDrawStyle": "",
+ "VlcWidRendering": "",
+ "SubtitleSEnterKeyAction": "",
+ "SubtitleSingleClickAction": "",
+ "SubtitleDoubleClickAction": "",
+ "SaveAsBehavior": "",
+ "SaveAsAppendLanguageCode": "",
+ "GridGoToSubtitleAndSetVideoPosition": "",
+ "GridGoToNextLine": "",
+ "GridGoToSubtitleOnlyWaveformOnly": "",
+ "GridGoToSubtitleAndPause": "",
+ "GridGoToSubtitleAndPlay": "",
+ "GridGoToSubtitleAndPauseAndFocusTextBox": "",
+ "SubtitleGridFormattingNone": "",
+ "SubtitleGridFormattingShowFormatting": "",
+ "SubtitleGridFormattingShowTags": "",
+ "WaveformParagraphBackgroundColor": "",
+ "WaveformParagraphSelectedBackgroundColor": "",
+ "WaveformAllowOverlap": "",
+ "SaveAsBehaviorUseSubtitleVideoFilename": "",
+ "SaveAsBehaviorUseVideoSubtitleFilename": "",
+ "SaveAsBehaviorUseVideoFileName": "",
+ "SaveAsBehaviorUseSubtitleFileName": "",
+ "SaveAsAppendLanguageCodeTwoLetter": "",
+ "SaveAsAppendLanguageCodeThreeLetter": "",
+ "SaveAsAppendLanguageCodeLanguageName": "",
+ "SplitOddLineActionWeightTop": "",
+ "SplitOddLineActionWeightBottom": "",
+ "SplitOddLinesAction": "",
+ "OcrUseWordSplitList": "",
+ "SpeechToTextSelectedLinesPromptFistTimeOnly": "",
+ "MultipleReplaceShowDotDotDotButtons": "",
+ "GridFocusTextboxAfterInsertNew": "",
+ "UseFocusedButtonBackgroundColor": "",
+ "FocusedButtonBackgroundColor": "",
+ "ForceCrLfOnSave": "",
+ "ShowWaveformToolbarPlayNext": "",
+ "ShowWaveformToolbarPlaySelection": "",
+ "TextBoxButtonShowAutoBreak": "",
+ "TextBoxButtonShowUnbreak": "",
+ "TextBoxButtonShowItalic": "",
+ "TextBoxButtonShowColor": "",
+ "TextBoxButtonShowRemoveFormatting": "",
+ "WaveformSingleClickAction": "",
+ "WaveformDoubleClickAction": "",
+ "AllSettings": "",
+ "UiScale": "",
+ "WaveformToolbarItems": "",
+ "MatchIconColorToDarkTheme": "",
+ "SubtitlePreviewProperties": "",
+ "PixelWidthInfo": ""
+ },
+ "Shortcuts": {
+ "Title": "",
+ "SearchShortcuts": "",
+ "Filter": "",
+ "CategoryGeneral": "",
+ "CategorySubtitleGridAndTextBox": "",
+ "CategorySubtitleGrid": "",
+ "CategoryWaveform": "",
+ "GeneralMergeSelectedLines": "",
+ "GeneralMergeWithPrevious": "",
+ "GeneralMergeWithNext": "",
+ "GeneralMergeWithPreviousAndUnbreak": "",
+ "GeneralMergeWithNextAndUnbreak": "",
+ "GeneralMergeWithPreviousAndAutoBreak": "",
+ "GeneralMergeWithNextAndAutoBreak": "",
+ "GeneralMergeSelectedLinesAndAutoBreak": "",
+ "GeneralMergeSelectedLinesAndUnbreak": "",
+ "GeneralMergeSelectedLinesAndUnbreakCjk": "",
+ "GeneralMergeSelectedLinesOnlyFirstText": "",
+ "GeneralMergeSelectedLinesBilingual": "",
+ "GeneralMergeWithPreviousBilingual": "",
+ "GeneralMergeWithNextBilingual": "",
+ "GeneralMergeOriginalAndTranslation": "",
+ "GeneralToggleTranslationMode": "",
+ "GeneralSwitchOriginalAndTranslation": "",
+ "GeneralSwitchOriginalAndTranslationTextBoxes": "",
+ "GeneralChooseLayout": "",
+ "GeneralLayoutChooseX": "",
+ "GeneralPlayFirstSelected": "",
+ "GeneralGoToFirstSelectedLine": "",
+ "GeneralGoToNextEmptyLine": "",
+ "GeneralGoToNextSubtitle": "",
+ "GeneralGoToNextSubtitlePlayTranslate": "",
+ "GeneralGoToNextSubtitleCursorAtEnd": "",
+ "GeneralGoToPrevSubtitle": "",
+ "GeneralGoToPrevSubtitlePlayTranslate": "",
+ "GeneralGoToStartOfCurrentSubtitle": "",
+ "GeneralGoToEndOfCurrentSubtitle": "",
+ "GeneralGoToPreviousSubtitleAndFocusVideo": "",
+ "GeneralGoToNextSubtitleAndFocusVideo": "",
+ "GeneralGoToPrevSubtitleAndPlay": "",
+ "GeneralGoToNextSubtitleAndPlay": "",
+ "GeneralGoToPreviousSubtitleAndFocusWaveform": "",
+ "GeneralGoToNextSubtitleAndFocusWaveform": "",
+ "GeneralGoToLineNumber": "",
+ "GeneralGoToVideoPosition": "",
+ "GeneralToggleItalic": "",
+ "GeneralToggleBold": "",
+ "GeneralToggleBookmarks": "",
+ "GeneralFocusTextBox": "",
+ "GeneralToggleBookmarksWithText": "",
+ "GeneralEditBookmarks": "",
+ "FileNew": "",
+ "FileOpen": "",
+ "FileOpenKeepVideo": "",
+ "FileSave": "",
+ "FileSaveAs": "",
+ "FileSaveAll": "",
+ "FileSaveOriginal": "",
+ "FileSaveOriginalAs": "",
+ "FileOpenOriginalSubtitle": "",
+ "FileCloseOriginalSubtitle": "",
+ "FileTranslatedSubtitle": "",
+ "FileCompare": "",
+ "FileStatistics": "",
+ "FileImportPlainText": "",
+ "FileImportBluRaySupForOcr": "",
+ "FileImportBluRaySupForEdit": "",
+ "FileImportTimeCodes": "",
+ "FileExportEbuStl": "",
+ "FileExportPac": "",
+ "FileExportEdlClipName": "",
+ "FileExportPlainText": "",
+ "FileExportCustomTextFormat1": "",
+ "FileExportCustomTextFormat2": "",
+ "FileExportCustomTextFormat3": "",
+ "FileExit": "",
+ "OpenSeDataFolder": "",
+ "EditFind": "",
+ "EditFindNext": "",
+ "EditFindPrevious": "",
+ "EditReplace": "",
+ "EditMultipleReplace": "",
+ "EditModifySelection": "",
+ "ListSelectAll": "",
+ "ListSelectFirst": "",
+ "ListSelectLast": "",
+ "ListInverseSelection": "",
+ "ListDeleteSelection": "",
+ "RippleDeleteSelection": "",
+ "Settings": "",
+ "Assigned": "",
+ "Unassigned": "",
+ "PressedKeyX": "",
+ "PressAKey": "",
+ "DetectKey": "",
+ "Control": "",
+ "Alt": "",
+ "Win": "",
+ "Shift": "",
+ "ControlMac": "",
+ "AltMac": "",
+ "WinMac": "",
+ "ShiftMac": "",
+ "ResetShortcuts": "",
+ "ResetShortcutsDetail": "",
+ "TogglePlayPause": "",
+ "ToggleLockTimeCodes": "",
+ "DuplicateSelectedLines": "",
+ "SourceView": "",
+ "ShowAlignmentPicker": "",
+ "AddOrEditBookmark": "",
+ "ListBookmarks": "",
+ "ToggleBookmark": "",
+ "GoToNextBookmark": "",
+ "ToggleWaveformToolbar": "",
+ "WaveformSetStartAndSetEndOfPreviousMinusGap": "",
+ "WaveformSetEndAndStartOfNextAfterGap": "",
+ "WaveformSetEndAndStartOfNextAfterGapAndGoToNext": "",
+ "FetchFirstWordFromNextSubtitle": "",
+ "MoveLastWordToNextSubtitle": "",
+ "MoveLastWordFromFirstLineDownCurrentSubtitle": "",
+ "MoveFirstWordFromNextLineUpCurrentSubtitle": "",
+ "ToggleFocusGridAndWaveform": "",
+ "ToggleFocusTextBoxAndWaveform": "",
+ "ToggleFocusTextBoxAndGrid": "",
+ "GoToPreviousLineAndSetVideoPosition": "",
+ "GoToPreviousLineFromVideoPosition": "",
+ "GoToNextLineFromVideoPosition": "",
+ "GoToNextLineAndSetVideoPosition": "",
+ "TextBoxDeleteSelectionNoClipboard": "",
+ "TextBoxCut": "",
+ "TextBoxCut2": "",
+ "TextBoxPaste": "",
+ "TextBoxCopy": "",
+ "TextBoxSelectAll": "",
+ "SubtitleGridCut": "",
+ "SubtitleGridCopy": "",
+ "SubtitleGridPaste": "",
+ "SetShortcutForX": "",
+ "CommandFileNewKeepVideo": "",
+ "FileOpenOriginal": "",
+ "FileCloseOriginal": "",
+ "RestoreAutoBackup": "",
+ "OpenContainingFolder": "",
+ "ImportTimeCodes": "",
+ "ImportSubtitleWithManuallyChosenEncoding": "",
+ "ExportBluRaySup": "",
+ "ExportCustomTextFormat": "",
+ "ExportPlainText": "",
+ "ShowHistory": "",
+ "ToggleRightToLeft": "",
+ "ModifySelection": "",
+ "AdjustDurations": "",
+ "ApplyDurationLimits": "",
+ "BatchConvert": "",
+ "BridgeGaps": "",
+ "ApplyMinGap": "",
+ "FixCommonErrors": "",
+ "MakeEmptyTranslationFromCurrentSubtitle": "",
+ "MergeLinesWithSameText": "",
+ "MergeLinesWithSameTimeCodes": "",
+ "SplitBreakLongLines": "",
+ "MergeShortLines": "",
+ "RemoveTextForHearingImpaired": "",
+ "JoinSubtitles": "",
+ "SplitSubtitle": "",
+ "SpellCheck": "",
+ "SpellCheckGetDictionary": "",
+ "OpenVideo": "",
+ "OpenVideoFromUrl": "",
+ "CloseVideo": "",
+ "SpeechToText": "",
+ "TextToSpeech": "",
+ "BurnIn": "",
+ "GenerateTransparent": "",
+ "UndockVideoControls": "",
+ "RedockVideoControls": "",
+ "GenerateBlankVideo": "",
+ "ReencodeVideo": "",
+ "CutVideo": "",
+ "CutVideoSelectedLines": "",
+ "AdjustAllTimes": "",
+ "VisualSync": "",
+ "TranslateViaCopyPaste": "",
+ "Shortcuts": "",
+ "WordLists": "",
+ "ChooseUiLanguage": "",
+ "ChooseRuleProfile": "",
+ "VideoFullScreen": "",
+ "CopyTextFromOriginalSelectedLines": "",
+ "TextBoxRemoveAllFormatting": "",
+ "TextBoxItalic": "",
+ "ResetWaveformZoomAndSpeed": "",
+ "TogglePlaybackSpeed": "",
+ "PlaybackSpeedSlower": "",
+ "PlaybackSpeedFaster": "",
+ "SwitchOriginalAndTranslationSelectedLines": "",
+ "MergeOriginalIntoTranslationSelectedLines": "",
+ "SeekSilence": "",
+ "SetVideoPositionCurrentSubtitleStart": "",
+ "SetVideoPositionCurrentSubtitleEnd": "",
+ "ToggleAudioTracks": "",
+ "ListErrors": "",
+ "GoToNextError": "",
+ "GoToPreviousError": "",
+ "AddNameToNameList": "",
+ "FindDoubleWords": "",
+ "FindDoubleLines": "",
+ "ColorX": "",
+ "RemoveColor": "",
+ "SurroundWith": "",
+ "SurroundWithXY": "",
+ "RepeatLine": "",
+ "RepeatPreviousLine": "",
+ "RepeatNextLine": "",
+ "MoveVideoPositionMilliseconds": "",
+ "ImportShortcutsTitle": "",
+ "ExportShortcutsTitle": "",
+ "XShortcutsImportedFromY": "",
+ "XShortcutsExportedToY": "",
+ "ImportImageSubtitleForEdit": "",
+ "ShowPointSyncViaOther": "",
+ "ShowPointSync": "",
+ "ShowMediaInformation": "",
+ "ChooseSubtitleFormat": "",
+ "TrimWhitespaceSelectedLines": "",
+ "WaveformHorizontalZoomInCommand": "",
+ "WaveformHorizontalZoomOutCommand": "",
+ "WaveformVerticalZoomInCommand": "",
+ "WaveformVerticalZoomOutCommand": "",
+ "CopySubtitlePathToClipboard": "",
+ "CopySubtitleOriginalPathToClipboard": "",
+ "FocusTextBox": "",
+ "SortByStartTime": "",
+ "SortByEndTime": "",
+ "DuplicatesFound": "",
+ "CopyTextToClipboard": "",
+ "CopyTextFromOriginalToClipboard": "",
+ "AssaDraw": "",
+ "AssaGenerateProgressBar": "",
+ "AssaGenerateBackgroundBox": "",
+ "AssaStyles": "",
+ "AssaProperties": "",
+ "AssaAttachments": "",
+ "AssaVideoColorPicker": "",
+ "RecalculateDurationSelectedLines": "",
+ "ToggleWaveformAndSpectrogramHeight": "",
+ "ToggleSpectrogramStyle": "",
+ "CopyMsRelativeToCurrentSubtitleLineToClipboard": "",
+ "LayoutZoomIn": "",
+ "LayoutZoomOut": ""
+ },
+ "WordLists": {
+ "Title": "",
+ "AddName": "",
+ "AddWord": "",
+ "AddPair": "",
+ "NameAndIgnoreList": "",
+ "UserWords": "",
+ "OcrFixList": "",
+ "UnableToAddItem": "",
+ "UnableToRemoveItem": ""
+ },
+ "ChooseLanguage": {
+ "Title": ""
+ }
+ },
+ "Help": {
+ "AboutSubtitleEdit": "Over ondertiteling bewerken",
+ "CheckForUpdates": "Controleer op updates",
+ "CheckForUpdatesChecking": "Controleren op updates...",
+ "CheckForUpdatesUpToDate": "U gebruikt de nieuwste versie.",
+ "CheckForUpdatesNewVersionAvailable": "Nieuwe versie beschikbaar: {0}",
+ "CheckForUpdatesUnableToCheck": "Kan niet controleren op updates.",
+ "CheckForUpdatesDownloadNewVersion": "Nieuwe versie downloaden"
+ },
+ "Ocr": {
+ "LinesToDraw": "",
+ "CurrentImage": "",
+ "AutoDrawAgain": "",
+ "StartOcr": "",
+ "PauseOcr": "",
+ "InspectLine": "",
+ "OcrEngine": "",
+ "Database": "",
+ "MaxWrongPixels": "",
+ "MaxErrorPct": "",
+ "NumberOfPixelsIsSpace": "",
+ "InspectImageMatches": "",
+ "ResolutionXYAndTopmarginZ": "",
+ "RunningOcrDotDotDotXY": "",
+ "RunningOcrDotDotDot": "",
+ "AutoSubmitFirstCharacter": "",
+ "EditNOcrDatabase": "",
+ "ZoomFactorX": "",
+ "ExpandInfoX": "",
+ "EditNOcrDatabaseXWithYItems": "",
+ "NewNOcrDatabase": "",
+ "RenameNOcrDatabase": "",
+ "NOcrDatabase": "",
+ "DrawMode": "",
+ "AddNewCharcter": "",
+ "LineIndexX": "",
+ "InspectNOcrAdditions": "",
+ "OcrSelectedLines": "",
+ "ShowImage": "",
+ "FixOcrErrors": "",
+ "PromptForUknownWords": "",
+ "TryToGuessUnknownWords": "",
+ "AutoBreakIfMoreThanXLines": "",
+ "UnknownWords": "",
+ "AllFixes": "",
+ "GuessesUsed": "",
+ "Ocr": "",
+ "OcrX": "",
+ "AddBetterMatch": "",
+ "NOcrInspectImageMatches": "",
+ "AddToOcrPair": "",
+ "AddNameToOcrReplaceList": "",
+ "WordToAdd": "",
+ "NameToAdd": "",
+ "ChangeWordFromTo": "",
+ "ClearBackground": "",
+ "ClearForeground": "",
+ "NOcrDrawHelp": "",
+ "EditWholeText": "",
+ "EditWordOnly": "",
+ "ImagePreProcessing": "",
+ "PreProcessingTitle": "",
+ "CropTransparent": "",
+ "InverseColors": "",
+ "RemoveBorders": "",
+ "Binarize": "",
+ "BorderSize": "",
+ "CaptureTopAlign": "",
+ "OcrImage": "",
+ "OneColor": "",
+ "DarknessThreshold": "",
+ "EditExportDotDotDot": "",
+ "EditBinaryOcrDatabase": "",
+ "BinaryImageCompareDatabase": "",
+ "RemoveXFromUnknownWordsList": "",
+ "DownloadingPaddleOcrEngineDotDotDot": "",
+ "DownloadingPaddleOcrModelsDotDotDot": "",
+ "PaddleOcr": "",
+ "BinaryImageCompareInspectImageMatches": ""
+ },
+ "Assa": {
+ "AssaDraw": "",
+ "DrawSelectTool": "",
+ "DrawLineTool": "",
+ "DrawBezierTool": "",
+ "DrawRectangleTool": "",
+ "DrawCircleTool": "",
+ "DrawCloseShape": "",
+ "DrawDeleteShape": "",
+ "DrawChangeLayer": "",
+ "DrawClearAll": "",
+ "DrawZoomIn": "",
+ "DrawZoomOut": "",
+ "DrawResetView": "",
+ "DrawToggleGrid": "",
+ "DrawCopyToClipboard": "",
+ "DrawShapes": "",
+ "DrawSelectedPoint": "",
+ "DrawSelectedShape": "",
+ "DrawSelectedLayer": "",
+ "DrawToolX": "",
+ "DrawHelpText": "",
+ "ProgressBarTitle": "",
+ "ProgressBarSettings": "",
+ "ProgressBarPosition": "",
+ "ProgressBarBottom": "",
+ "ProgressBarTop": "",
+ "ProgressBarForeColor": "",
+ "ProgressBarBackColor": "",
+ "ProgressBarStyle": "",
+ "ProgressBarSquareCorners": "",
+ "ProgressBarRoundedCorners": "",
+ "ProgressBarChapters": "",
+ "ProgressBarSplitterWidth": "",
+ "ProgressBarSplitterHeight": "",
+ "ProgressBarXAdjustment": "",
+ "ProgressBarYAdjustment": "",
+ "ProgressBarTextAlignment": "",
+ "ProgressBarTakePosFromVideo": "",
+ "ProgressBarPreview": "",
+ "ResolutionResamplerTitle": "",
+ "ResolutionResamplerSourceRes": "",
+ "ResolutionResamplerTargetRes": "",
+ "ResolutionResamplerChangeMargins": "",
+ "ResolutionResamplerChangeFontSize": "",
+ "ResolutionResamplerChangePositions": "",
+ "ResolutionResamplerChangeDrawing": "",
+ "ResolutionResamplerFromVideo": "",
+ "ResolutionResamplerSourceAndTargetEqual": "",
+ "ResolutionResamplerNothingSelected": "",
+ "BackgroundBoxGenerator": "",
+ "BackgroundBoxPadding": "",
+ "BackgroundBoxFillWidth": "",
+ "BackgroundBoxBoxColor": "",
+ "BackgroundBoxRadius": "",
+ "BackgroundBoxCircle": "",
+ "BackgroundBoxSpikes": "",
+ "BackgroundBoxBubbles": "",
+ "BackgroundBoxWave": "",
+ "BackgroundBoxHexagon": "",
+ "BackgroundBoxTornPaper": "",
+ "BackgroundBoxCloud": "",
+ "BackgroundBoxTornPaperDouble": "",
+ "BackgroundBoxStarburst": "",
+ "BackgroundBoxScroll": "",
+ "StylesTitle": "",
+ "StylesInFile": "",
+ "StylesSaved": "",
+ "StylesTitleX": "",
+ "PropertiesTitleX": "",
+ "AttachmentsTitleX": "",
+ "SmartWrappingTopWide": "",
+ "EndOfLineWrapping": "",
+ "NoWrapping": "",
+ "SmartWrappingBottomWide": "",
+ "FontsAndGraphics": "",
+ "WrapStyle": "",
+ "BorderAndShadowScaling": "",
+ "OriginalScript": "",
+ "Graphics": "",
+ "CopyToStorageStyles": "",
+ "CopyToFileStyles": "",
+ "SetStyleAsDefault": "",
+ "TakeUsagesFromDotDotDot": "",
+ "NoAttachmentsFound": "",
+ "DeleteStyleQuestion": "",
+ "DeleteStylesQuestion": "",
+ "OpenStyleImportFile": "",
+ "Primary": "",
+ "Secondary": "",
+ "ApplyOverrideTags": "",
+ "ChooseOverrideTagToAdd": "",
+ "FontSizeChange": "",
+ "MoveTextFromLeftToRight": "",
+ "ColorFromWhiteToRed": "",
+ "RotateXSlow": "",
+ "RotateX": "",
+ "RotateY": "",
+ "RotateTilt": "",
+ "SpaceIncrease": "",
+ "PopIn": "",
+ "SpinIn": "",
+ "PlayCurrent": "",
+ "SetPosition": "",
+ "ImageColorPicker": "",
+ "CopyColorAsHextoClipboard": "",
+ "GeneratingBackgroundBoxXOfY": "",
+ "ApplyAdvancedEffectTitle": "",
+ "ChooseEffect": "",
+ "AdvancedEffectTypewriter": "",
+ "AdvancedEffectTypewriterDescription": "",
+ "AdvancedEffectTypewriterWithHighlight": "",
+ "AdvancedEffectTypewriterWithHighlightDescription": "",
+ "AdvancedEffectWordByWord": "",
+ "AdvancedEffectWordByWordDescription": "",
+ "AdvancedEffectKaraoke": "",
+ "AdvancedEffectKaraokeDescription": "",
+ "AdvancedEffectFancyKaraoke": "",
+ "AdvancedEffectFancyKaraokeDescription": "",
+ "AdvancedEffectScrambleReveal": "",
+ "AdvancedEffectScrambleRevealDescription": "",
+ "AdvancedEffectRainbowPulse": "",
+ "AdvancedEffectRainbowPulseDescription": "",
+ "AdvancedEffectWave": "",
+ "AdvancedEffectWaveDescription": "",
+ "AdvancedEffectWaveBlue": "",
+ "AdvancedEffectWaveBlueDescription": "",
+ "AdvancedEffectStarWarsScroll": "",
+ "AdvancedEffectStarWarsScrollDescription": "",
+ "AdvancedEffectEndCreditsScroll": "",
+ "AdvancedEffectEndCreditsScrollDescription": "",
+ "AdvancedEffectStarfield": "",
+ "AdvancedEffectStarfieldDescription": "",
+ "AdvancedEffectRain": "",
+ "AdvancedEffectRainDescription": "",
+ "AdvancedEffectSnow": "",
+ "AdvancedEffectSnowDescription": "",
+ "AdvancedEffectOldMovie": "",
+ "AdvancedEffectOldMovieDescription": "",
+ "AdvancedEffectNeonBurst": "",
+ "AdvancedEffectNeonBurstDescription": "",
+ "AdvancedEffectSettings": "",
+ "AdvancedEffectSnowFlakeCount": "",
+ "AdvancedEffectStarfieldStarCount": "",
+ "AdvancedEffectStarfieldSpeed": "",
+ "AdvancedEffectGlitch": "",
+ "AdvancedEffectGlitchDescription": "",
+ "AdvancedEffectBounceIn": "",
+ "AdvancedEffectBounceInDescription": "",
+ "AdvancedEffectFireflies": "",
+ "AdvancedEffectFirefliesDescription": "",
+ "AdvancedEffectMatrix": "",
+ "AdvancedEffectMatrixDescription": "",
+ "AdvancedEffectAudioBars": "",
+ "AdvancedEffectAudioBarsDescription": "",
+ "AdvancedEffectAudioPulse": "",
+ "AdvancedEffectAudioPulseDescription": "",
+ "AdvancedEffectConfetti": "",
+ "AdvancedEffectConfettiDescription": "",
+ "AdvancedEffectHearts": "",
+ "AdvancedEffectHeartsDescription": "",
+ "AdvancedEffectWordSpacing": "",
+ "AdvancedEffectWordSpacingDescription": "",
+ "AdvancedEffectFancyKaraokeAutoDetectActiveWord": "",
+ "AdvancedEffectFancyKaraokeGlow": "",
+ "AdvancedEffectFancyKaraokeActiveColor": "",
+ "AdvancedEffectFancyKaraokeInactiveColor": "",
+ "AdvancedEffectFancyKaraokeInactiveOpacity": "",
+ "AdvancedEffectWordSpacingPixels": "",
+ "AdvancedEffectSlowZoomOut": "",
+ "AdvancedEffectSlowZoomOutDescription": "",
+ "AdvancedEffectSlowZoomIn": "",
+ "AdvancedEffectSlowZoomInDescription": "",
+ "AdvancedEffectFadeIn": "",
+ "AdvancedEffectFadeInDescription": "",
+ "AdvancedEffectFadeOut": "",
+ "AdvancedEffectFadeOutDescription": "",
+ "AdvancedEffectTvClose": "",
+ "AdvancedEffectTvCloseDescription": "",
+ "AdvancedEffectSlideInLeft": "",
+ "AdvancedEffectSlideInLeftDescription": "",
+ "AdvancedEffectSlideInRight": "",
+ "AdvancedEffectSlideInRightDescription": "",
+ "AdvancedEffectFadeInOut": "",
+ "AdvancedEffectFadeInOutDescription": "",
+ "OverrideTagsHistory": ""
+ },
+ "About": {
+ "Title": "Over ondertitelbewerking",
+ "TranslatedBy": "Vertaald door: {0}",
+ "LicenseText": "Subtitle Edit is gratis software onder de MIT-licentie.",
+ "DescriptionTextBeta": "Subtitle Edit 5 bèta is een ontwikkelingsversie van onze komende grote release.\r\n\r\nWe zijn actief bezig met het verfijnen van de nieuwe tools en stellen uw hulp bij het testen op prijs.\r\n\r\nDeel uw feedback om ons te helpen de best mogelijke definitieve versie te garanderen.\r\n\r\n\r\nBedankt dat je deel uitmaakt van de Subtitle Edit-community!\r\n:)",
+ "IssueTrackingAndSourceCode": "Probleemtracking en broncode:",
+ "GitHub": "Github",
+ "Donate": "Doneer:",
+ "PayPal": "PayPal",
+ "GitHubSponsor": "Github-sponsor",
+ "Or": "of"
+ }
+}
\ No newline at end of file
diff --git a/src/UI/Assets/Languages/English.json b/src/UI/Assets/Languages/English.json
index d4bc3034c54..42e0f630bd6 100644
--- a/src/UI/Assets/Languages/English.json
+++ b/src/UI/Assets/Languages/English.json
@@ -648,7 +648,14 @@
"rightMargin": "Right margin",
"installed": "Installed",
"advancedDotDotDot": "Advanced...",
- "chooseAlignment": "Choose alignment"
+ "chooseAlignment": "Choose alignment",
+ "maxWidthPixels": "Max width (pixels)",
+ "sampleText": "Sample text",
+ "boxWidthPixels": "Box width (pixels)",
+ "fadeInOut": "Fade in/out",
+ "alpha": "Alpha",
+ "pickResolution": "Pick resolution",
+ "manualSync": "Manual sync"
},
"main": {
"menu": {
@@ -760,7 +767,9 @@
"pointSyncViaOther": "Point sync via _other subtitle...",
"sortSubtitles": "_Sort subtitles...",
"setLayer": "Set layer...",
- "filterLayersForDisplayDotDotDot": "Filter layers for display..."
+ "filterLayersForDisplayDotDotDot": "Filter layers for display...",
+ "toggleSelectSubtitleWhilePlayingCurrentlyOn": "Toggle select subtitle while playing (currently: on)",
+ "toggleSelectSubtitleWhilePlayingCurrentlyOff": "Toggle select subtitle while playing (currently: off)"
},
"toolbar": {
"newHint": "Start a new subtitle file {0}",
@@ -895,7 +904,9 @@
"nothingToSaveOriginal": "Nothing to save (original)",
"liveSpellCheckLanguageXLoaded": "Live spell check language {0} loaded",
"downloadFfmpegTitle": "Download FFmpeg?",
- "downloadFfmpegQuestion": "FFmpeg is required for playing online videos and for some video editing features.\n\nDownload FFmpeg now?"
+ "downloadFfmpegQuestion": "FFmpeg is required for playing online videos and for some video editing features.\n\nDownload FFmpeg now?",
+ "selectCurrentSubtitleWhilePlayingOn": "Select current subtitle while playing: ON",
+ "selectCurrentSubtitleWhilePlayingOff": "Select current subtitle while playing: OFF"
},
"file": {
"ebuSaveOptions": {
@@ -1395,7 +1406,14 @@
"editStyles": "Edit styles",
"editProperties": "Edit properties",
"editAttachments": "Edit attachments",
- "errorsExportedX": "Errors exported: {0}"
+ "errorsExportedX": "Errors exported: {0}",
+ "slowFontSizeChange": "Slow font size change",
+ "increaseFontKerning": "Increase font kerning",
+ "scrollUp": "Scroll up",
+ "scrollDown": "Scroll down",
+ "rotateIn": "Rotate in",
+ "tiltBounce": "Tilt bounce",
+ "fontSizeBounceIn": "Font size bounce in"
},
"changeCasing": {
"title": "Change casing",
@@ -1445,7 +1463,9 @@
},
"mergeShortLines": {
"title": "Merge short lines",
- "highlightParts": "Highlight parts (karaoke)"
+ "highlightParts": "Highlight parts (karaoke)",
+ "mergedLineInfo": "Merged line {0} into {1} - {2}",
+ "linesMergedX": "Lines merged: {0}"
},
"mergeLinesWithSameText": {
"title": "Merge lines with same text",
@@ -1463,7 +1483,23 @@
"nothingToReport": "No issues found.",
"saveNetflixQualityReport": "Save Netflix quality report",
"netflixReportSaved": "Netflix quality report saved",
- "netFlixQualityReportSavedToX": "Netflix quality report saved to:\n {0}"
+ "netFlixQualityReportSavedToX": "Netflix quality report saved to:\n {0}",
+ "dialogHyphenSpace": "Dialog hyphen space",
+ "ellipsesNotThreeDots": "Use elipses (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",
+ "frameRate": "Frame rate",
+ "twoFrameGrap": "Two frame gap",
+ "whiteSpace": "White space"
},
"imageBasedEdit": {
"editImagedBaseSubtitle": "Edit imaged-based subtitle",
@@ -1583,7 +1619,8 @@
"outputProperties": "Output properties...",
"videoFileSize": "Video file size",
"oneBox": "One box",
- "boxPerLine": "Box per line"
+ "boxPerLine": "Box per line",
+ "logoInfo": "Pick a PNG image and drag it to position it on the video."
},
"videoTransparent": {
"title": "Generate transparent video with subtitles",
@@ -1664,7 +1701,8 @@
"edgeTtsPitch": "Edge-TTS pitch",
"edgeTtsPitchDescription": "Pitch adjustment for Edge-TTS, e.g. \"+10Hz\", \"-5Hz\", or \"+0Hz\" for default.",
"edgeTtsVolume": "Edge-TTS volume",
- "edgeTtsVolumeDescription": "Volume adjustment for Edge-TTS, e.g. \"+20%\", \"-10%\", or \"+0%\" for default."
+ "edgeTtsVolumeDescription": "Volume adjustment for Edge-TTS, e.g. \"+20%\", \"-10%\", or \"+0%\" for default.",
+ "downloadPiperPrompt": "\"Text to speech\" requires Piper.\r\n\r\nDownload and use Piper?"
},
"shotChanges": {
"titleGenerateOrImport": "Generate/import shot changes",
@@ -1708,7 +1746,8 @@
"titleOrLanguage": "Title/language",
"viewMatroskaTrackX": "View Matroska track - {0}",
"resolutionSeparator": "x",
- "openFromUrlTitle": "Open video file from URL"
+ "openFromUrlTitle": "Open video file from URL",
+ "toggleCurrentSubtitleWhilePlaying": "Toggle current subtitle while playing"
},
"waveform": {
"guessTimeCodes": "Guess time codes",
@@ -1785,7 +1824,8 @@
"lineMerge": "Line merge",
"delayInSecondsBetweenRequests": "Delay in seconds between requests",
"maxBytesPerRequest": "Max bytes per request",
- "promptText": "Prompt text"
+ "promptText": "Prompt text",
+ "translateEachLineSeparately": "Translate each line separately"
},
"options": {
"settings": {
@@ -2044,7 +2084,11 @@
"uiScale": "UI scale (%)",
"waveformToolbarItems": "Waveform toolbar items",
"matchIconColorToDarkTheme": "Match icon color to dark theme foreground color",
- "subtitlePreviewProperties": "Subtitle preview properties"
+ "subtitlePreviewProperties": "Subtitle preview properties",
+ "pixelWidthInfo": "Green lines = max-width limit | Red area = text exceeds limit",
+ "spellCheckEngineHunSpelll": "Hunspell",
+ "spellCheckEngineMsWord": "MS Word",
+ "spellCheckEngine": "Spell check engine"
},
"shortcuts": {
"title": "Shortcuts",
diff --git a/src/UI/Assets/Languages/Italian.json b/src/UI/Assets/Languages/Italian.json
index 1061778ec00..fd36a47aa6a 100644
--- a/src/UI/Assets/Languages/Italian.json
+++ b/src/UI/Assets/Languages/Italian.json
@@ -1,6 +1,6 @@
{
"Title": "SubtitleEdit",
- "TranslatedBy": "v. 02.04.2026 di bovirus",
+ "TranslatedBy": "v. 08.04.2026 di bovirus",
"CultureName": "it-IT",
"General": {
"Abort": "Annulla",
@@ -310,6 +310,7 @@
"NewDotDotDot": "Nuovo...",
"NewProfile": "Nuovo profilo",
"NewSubtitleStartKeyDownSetEndKeyUp": "Inserisci sottotitolo: inizia con il tasto giù, imposta la fine con il tasto su",
+ "SetSubtitleStartAtVideoPositionSetEndAtKeyUpAndGoToNext": "Imposta l'inizio nella posizione del video, imposta la fine premendo il tasto su e vai al successivo",
"No": "No",
"NoFilesToConvert": "Nessun file da convertire",
"NoLanguageCode": "Nessun codice lingua",
@@ -643,7 +644,17 @@
"CopyToClipboard": "Copia negli appunti",
"PlayCurrent": "Riproduci attuale",
"LeftMargin": "Margine sinistro",
- "RightMargin": "Margine destro"
+ "RightMargin": "Margine destro",
+ "Installed": "Installato",
+ "AdvancedDotDotDot": "Avanzate...",
+ "ChooseAlignment": "Scegli allineamento",
+ "MaxWidthPixels": "Larghezza massima (pixel)",
+ "SampleText": "Esempio testo",
+ "BoxWidthPixels": "Larghezza riquadro (pixel)",
+ "FadeInOut": "Dissolvenza in entrata/uscita",
+ "Alpha": "Alfa",
+ "PickResolution": "Scegli risoluzione",
+ "ManualSync": "Sincronizzazione manuale"
},
"Main": {
"AudioTrackIsNowX": "La traccia audio ora è \"{0}",
@@ -742,6 +753,8 @@
"LiveSpellCheckLanguageXLoaded": "Lingua controllo ortografico {0} in tempo reale caricata",
"DownloadFfmpegTitle": "Vuoi scaricare FFmpeg?",
"DownloadFfmpegQuestion": "FFmpeg è richiesto per riprodurre video online e per alcune funzionalità di editing video.\r\n\r\nVuoi scaricare FFmpeg?",
+ "SelectCurrentSubtitleWhilePlayingOn": "Durante la riproduzione seleziona il sottotitolo attuale : ON",
+ "SelectCurrentSubtitleWhilePlayingOff": "Durante la riproduzione seleziona il sottotitolo attuale: OFF",
"Menu": {
"File": "_File",
"New": "_Nuovo",
@@ -843,6 +856,7 @@
"HelpTitle": "_Aiuto",
"Help": "_Guida in linea",
"About": "_Info programma...",
+ "CheckForUpdates": "_Controlla aggiornamenti...",
"FixRightToLeftViaUnicodeControlCharacters": "Correggi RTL tramite caratteri di controllo Unicode (righe selezionate)",
"RemoveUnicodeControlCharacters": "Rimuovi caratteri di controllo Unicode (righe selezionate)",
"ReverseRightToLeftStartEnd": "Inverti inizio/fine RTL (righe selezionate)",
@@ -850,7 +864,9 @@
"PointSyncViaOther": "Sincronizzazi_one punti tramite altri sottotitoli...",
"SortSubtitles": "Ordina _sottotitoli...",
"SetLayer": "Imposta livello...",
- "FilterLayersForDisplayDotDotDot": "Filtra livelli per la visualizzazione..."
+ "FilterLayersForDisplayDotDotDot": "Filtra livelli per la visualizzazione...",
+ "ToggleSelectSubtitleWhilePlayingCurrentlyOn": "Attiva/disattiva selezione sottotitoli durante la riproduzione (attualmente: attiva)",
+ "ToggleSelectSubtitleWhilePlayingCurrentlyOff": "Attiva/disattiva selezione sottotitoli durante la riproduzione (attualmente: non attiva)"
},
"Toolbar": {
"NewHint": "Crea nuovo file sottotitoli {0}",
@@ -1138,6 +1154,8 @@
"LengthLessThan": "Lunghezza inferiore a",
"LengthGreaterThan": "Lunghezza superiore a",
"PixelLengthGreaterThan": "Lunghezza pixel >",
+ "GapLessThan": "Gap in ms <",
+ "GapGreaterThan": "Gap in ms >",
"ExactlyOneLine": "Esattamente una linea",
"ExactlyTwoLines": "Esattamente due righe",
"MoreThanTwoLines": "Più di due righe",
@@ -1159,7 +1177,11 @@
"ExportReplaceRules": "Esporta regole",
"AppliedRules": "Regole applicate",
"FindRule": "Trova regola",
- "XLinesAffected": "{0:#,##0} righe interessate"
+ "XLinesAffected": "{0:#,##0} righe interessate",
+ "DeleteCategoryConfirm": "Vuoi eliminare la categoria '{0}'?",
+ "DeleteRuleConfirm": "Vuoi eliminare la regola '{0}'?",
+ "FindWhat": "Trova questo",
+ "DescriptionOptional": "Descrizione (facoltativa)"
},
"Find": {
"SearchTextWatermark": "Cerca testo...",
@@ -1304,7 +1326,9 @@
"BackToFixList": "Torna all'elenco correzioni",
"ApplyFixesAndClose": "Applica correzioni e chiudi",
"FixCommonOcrErrorsStep2": "Correggi errori comuni, passaggio 2 (applica correzioni)",
- "FixCommonOcrErrorsStep2FixesFoundX": "Correggi errori comuni, passaggio 2 - correzioni trovate: {0}"
+ "FixCommonOcrErrorsStep2FixesFoundX": "Correggi errori comuni, passaggio 2 - correzioni trovate: {0}",
+ "Action": "Azione",
+ "ApplySelectedFixes": "Applica correzioni selezionate"
},
"AdjustDurations": {
"Title": "Modifica durate",
@@ -1391,7 +1415,14 @@
"EditStyles": "Modifica stili",
"EditProperties": "Modifica proprietà",
"EditAttachments": "Modifica allegati",
- "ErrorsExportedX": "Errori esportati: {0}"
+ "ErrorsExportedX": "Errori esportati: {0}",
+ "SlowFontSizeChange": "Modifica lenta dimensione font",
+ "IncreaseFontKerning": "Aumenta kerning font",
+ "ScrollUp": "Scorri verso l'alto",
+ "ScrollDown": "Scorrere verso il basso",
+ "RotateIn": "Ruota in",
+ "TiltBounce": "Rimbalzo inclinazione",
+ "FontSizeBounceIn": "Rimbalzo dimensione font in"
},
"ChangeCasing": {
"Title": "Modifica maiuscolo/minuscolo",
@@ -1441,7 +1472,9 @@
},
"MergeShortLines": {
"Title": "Unisci righe brevi",
- "HighlightParts": "Evidenzia parti (karaoke)"
+ "HighlightParts": "Evidenzia parti (karaoke)",
+ "MergedLineInfo": "Riga {0} unita in {1} - {2}",
+ "LinesMergedX": "Righe unite: {0}"
},
"MergeLinesWithSameText": {
"Title": "Unisci righe con lo stesso testo",
@@ -1459,7 +1492,23 @@
"NothingToReport": "Nessun problema rilevato.",
"SaveNetflixQualityReport": "Salva rapporto qualità Netflix",
"NetflixReportSaved": "Rapporto qualità Netflix salvato",
- "NetFlixQualityReportSavedToX": "Rapporto qualità Netflix salvato in:\r\n\r\n{0}"
+ "NetFlixQualityReportSavedToX": "Rapporto qualità Netflix salvato in:\r\n\r\n{0}",
+ "DialogHyphenSpace": "Spazio trattino di dialogo",
+ "EllipsesNotThreeDots": "Usa ellissi (non tre punti)",
+ "OnlyAllowedGlyphs": "Sono consentiti solo glifi",
+ "Italics": "Corsivo",
+ "MaxCharsSec": "Caratteri massimi/sec",
+ "MaxDuration": "Durata massima",
+ "MaxLineLength": "Lunghezza massima riga",
+ "MinDuration": "Durata minima",
+ "MaxNumberOfLines": "Numero massimo di righe",
+ "OneToTenSpellOut": "Indica da uno a dieci",
+ "ShotChanges": "Cambi di scena",
+ "StartNumberSpellOut": "Indica il numero di partenza",
+ "TextforHiUseBrackets": "Testo per HI, usa parentesi",
+ "FrameRate": "Frequenza fotogrammi",
+ "TwoFrameGrap": "Gap tra due fotogrammi",
+ "WhiteSpace": "Spazio bianco"
},
"ImageBasedEdit": {
"EditImagedBaseSubtitle": "Modifica sottotitoli basati su immagini",
@@ -1484,6 +1533,24 @@
"ResizeImages": "Ridimensiona immagini",
"Percentage": "Percentuale",
"ResizeImagesInfo": "Inserisci la percentuale per ridimensionare le immagini.\r\n\r\nGli aggiornamenti verranno visualizzati in tempo reale."
+ },
+ "RemoveTextForHearingImpaired": {
+ "Title": "Rimuovi testo per non udenti",
+ "Interjections": "Interiezioni",
+ "SkipIfStartWith": "Salta se inizia con",
+ "RemoveTextBetween": "Rimuovi testo tra",
+ "Brackets": "Parentesi",
+ "CurlyBrackets": "Parentesi graffe",
+ "Parentheses": "Parentesi",
+ "And": "E",
+ "OnlySeparateLines": "Solo linee separate",
+ "RemoveTextBeforeColon": "Rimuovi testo prima dei due punti",
+ "OnlyIfTextIsUppercase": "Solo se il testo è in maiuscolo",
+ "OnlyOnSeparateLine": "Solo in riga separata",
+ "IfLineIsUppercase": "Se la riga è maiuscola",
+ "IfLineContains": "Se la riga contiene",
+ "IfLineOnlyContainsMusicSymbols": "Se la riga contiene solo simboli musicali",
+ "RemoveInterjections": "Rimuovi interiezioni"
}
},
"SpellCheck": {
@@ -1537,6 +1604,9 @@
"AddCurrentSubtitle": "Aggiungi sottotitolo attuale",
"TitleOrLanguage": "Titolo/lingua",
"ViewMatroskaTrackX": "Visualizza traccia Matroska - {0}",
+ "ResolutionSeparator": "x",
+ "OpenFromUrlTitle": "Apri file video dall'URL",
+ "ToggleCurrentSubtitleWhilePlaying": "Attiva/disattiva sottotitoli attuali durante la riproduzione",
"BurnIn": {
"Title": "Genera video con sottotitoli incorporati",
"InfoAssaOff": "Nota: è supportato lo stile Advanced SubStation Alpha.",
@@ -1579,7 +1649,8 @@
"OutputProperties": "Proprietà output...",
"VideoFileSize": "Dimensioni file video",
"OneBox": "Un box",
- "BoxPerLine": "CasellBox per riga"
+ "BoxPerLine": "CasellBox per riga",
+ "LogoInfo": "Scegli un'immagine PNG e trascinala per posizionarla sul video."
},
"VideoTransparent": {
"Title": "Genera video trasparenti con sottotitoli",
@@ -1604,7 +1675,15 @@
"SelectModel": "Seleziona modello",
"ViewWhisperLogFile": "Visualizza file registro Whisper",
"ReDownloadX": "Scarica nuovamente {0}",
- "DownloadingSpeechToTextModel": "Download modello sintesi vocale"
+ "DownloadingSpeechToTextModel": "Download modello sintesi vocale",
+ "WhisperPostProcessingTitle": "Post-elaborazione Whisper",
+ "AdjustTimings": "Regola tempi",
+ "MergeShortLines": "Unisci righe brevi",
+ "BreakSplitLongLines": "Interrompi/dividi righe lunghe",
+ "FixShortDuration": "Correggi durata breve",
+ "FixCasing": "Correggi maiuscolo/minuscolo",
+ "AddPeriods": "Aggiungi periodi",
+ "ChangeUnderlineToColor": "Cambia sottolineatura in colore"
},
"TextToSpeech": {
"Title": "Sintesi vocale",
@@ -1628,7 +1707,32 @@
"RegenerateAudio": "Rigenera audio",
"AutoContinuePlaying": "Continua automaticamente la riproduzione",
"AddingAudioToVideoFileDotDotDot": "Aggiunta audio al file video...",
- "PreparingMergeDotDotDot": "Preparazione unione..."
+ "PreparingMergeDotDotDot": "Preparazione unione...",
+ "ImportVoiceDotDotDot": "Importa voce...",
+ "VoiceImportSuccessTitle": "Voce importata",
+ "VoiceXImported": "La voce '{0}' è stata importata correttamente",
+ "AdvancedTtsSettings": "Impostazioni TTS avanzate",
+ "ProAudioPostProcessing": "Post-elaborazione professionale audio",
+ "ProAudioPostProcessingDescription": "Applica a ciascun segmento EQ warmth, noise gate, compressione, normalizzazione del volume (-16 LUFS) e dissolvenza in entrata/uscita.",
+ "AudioDucking": "Ducking audio",
+ "AudioDuckingDescription": "Riduci il volume dell'audio del video originale e uniscilo con l'audio TTS, in modo che la colonna sonora originale sia ancora debolmente udibile.",
+ "OriginalVolumePercent": "% volume originale",
+ "VadSilenceCompression": "Compressione silenzio VAD",
+ "VadSilenceCompressionDescription": "Riduci le pause tra le parole prima di cambiare tempo.\r\nUsa il rilevamento dell'attività vocale per comprimere solo le pause di silenzio mantenendo intatto il parlato.\r\nQuesto è il primo passo preferibile: riduce la durata senza alcuna perdita di qualità.",
+ "MaxSilenceMs": "Silenzio massimo (ms)",
+ "HighQualityTimeStretch": "Time-stretch ad alta qualità (WSOLA/elastico)",
+ "HighQualityTimeStretchDescription": "Per i cambiamenti di velocità che preservano l'intonazione usa l'algoritmo della banda elastica (WSOLA) invece del filtro a tempo predefinito .\r\nProduce un parlato dal suono più naturale, soprattutto a fattori di velocità più elevati.\r\nRichiede librubberband nella build di FFmpeg: torna automaticamente al tempo se non disponibile.",
+ "SilencePaddingMs": "Riempimento silenzio (ms)",
+ "SilencePaddingMsDescription": "Aggiunge un breve silenzio alla fine di ogni segmento.\r\nUtile per prendere respiro tra una frase e l'altra.",
+ "OutputSampleRate": "Frequenza campionamento in uscita (0 = predefinita)",
+ "OutputSampleRateDescription": "Ricampiona tutti i segmenti alla frequenza di campionamento specificata (ad esempio 44100, 48000).\r\nPer mantenere la frequenza di campionamento originale Impostalo a 0 .",
+ "EdgeTtsRate": "Tasso Edge-TTS",
+ "EdgeTtsRateDescription": "Velocità voce Edge-TTS, ad es.\r\n\"+50%\", \"-30%\" o \"+0%\" per impostazione predefinita.",
+ "EdgeTtsPitch": "Tono Edge-TTS",
+ "EdgeTtsPitchDescription": "Regolazione tono Edge-TTS, ad es.\r\n\"+10Hz\", \"-5Hz\" o \"+0Hz\" per impostazione predefinita.",
+ "EdgeTtsVolume": "Volume Edge-TTS",
+ "EdgeTtsVolumeDescription": "Regolazione volume Edge-TTS, ad es.\r\n\"+20%\", \"-10%\" o \"+0%\" per impostazione predefinita.",
+ "DownloadPiperPrompt": "La \"sintesi vocale\" richiede Piper.\r\n\r\nVuoi scaricare e usare Piper?"
},
"ShotChanges": {
"TitleGenerateOrImport": "Genera/importa cambi inquadrature",
@@ -1715,7 +1819,12 @@
"ReCopyTextToClipboard": "Ricopia il testo negli appunti (per traduttore/IA)",
"BlockXOfY": "Blocco {0} di {1}",
"NoTextInClipboard": "Nessun testo negli appunti",
- "TextInClipboardIsSameAsSourceText": "Il testo negli appunti è lo stesso del testo sorgente, riprova."
+ "TextInClipboardIsSameAsSourceText": "Il testo negli appunti è lo stesso del testo sorgente, riprova.",
+ "LineMerge": "Unione riga",
+ "DelayInSecondsBetweenRequests": "Ritardo tra le richieste (secondi)",
+ "MaxBytesPerRequest": "Numero massimo byte per richiesta",
+ "PromptText": "Testo suggerito",
+ "TranslateEachLineSeparately": "Traduci ogni riga separatamente"
},
"Options": {
"Settings": {
@@ -1808,7 +1917,7 @@
"MaxLines": "Numero massimo di righe",
"UnbreakSubtitlesShortThan": "Non interrompere sottotitoli più brevi di",
"NewEmptyDefaultMs": "Durata predefinita nuovi sottotitoli (ms)",
- "PromptDeleteLines": "Richiedi di eliminare righe",
+ "PromptBeforeDelete": "Chiedi conferma prima dell'eliminazione",
"RememberPositionAndSize": "Ricorda posizione/dimensioni finestra",
"AutoBackupOn": "Backup automatico",
"AutoBackupIntervalMinutes": "Intervallo backup automatico (minuti)",
@@ -1973,7 +2082,12 @@
"AllSettings": "Tutte le impostazioni",
"UiScale": "Scala interfaccia utente (%)",
"WaveformToolbarItems": "Elementi barra strumenti forma d'onda",
- "MatchIconColorToDarkTheme": "Abbina colore icona al colore di primo piano del tema scuro"
+ "MatchIconColorToDarkTheme": "Abbina colore icona al colore di primo piano del tema scuro",
+ "SubtitlePreviewProperties": "Proprietà anteprima sottotitoli",
+ "PixelWidthInfo": "Linee verdi = limite larghezza massima | Area rossa = il testo supera il limite",
+ "SpellCheckEngineHunSpelll": "Hunspell",
+ "SpellCheckEngineMsWord": "MS Word",
+ "SpellCheckEngine": "Motore controllo ortografico"
},
"Shortcuts": {
"Title": "Tasti rapidi",
@@ -2244,7 +2358,13 @@
}
},
"Help": {
- "AboutSubtitleEdit": "Info su Subtitile Edit"
+ "AboutSubtitleEdit": "Info su Subtitile Edit",
+ "CheckForUpdates": "Controlla aggiornamenti",
+ "CheckForUpdatesChecking": "Controllo aggiornamenti...",
+ "CheckForUpdatesUpToDate": "Questa versione è aggiornata.",
+ "CheckForUpdatesNewVersionAvailable": "Disponibile nuova versione: {0}",
+ "CheckForUpdatesUnableToCheck": "Impossibile controllare gli aggiornamenti.",
+ "CheckForUpdatesDownloadNewVersion": "Download nuova versione"
},
"Ocr": {
"LinesToDraw": "Righe da disegnare",
diff --git a/src/UI/Assets/Languages/Norwegian.json b/src/UI/Assets/Languages/Norwegian.json
new file mode 100644
index 00000000000..b85e63d27de
--- /dev/null
+++ b/src/UI/Assets/Languages/Norwegian.json
@@ -0,0 +1,2631 @@
+{
+ "Title": "Subtitle Edit",
+ "TranslatedBy": "Gemini",
+ "CultureName": "nb-NO",
+ "General": {
+ "Abort": "Avbryt",
+ "Actor": "Skuespiller",
+ "Actors": "Skuespillere",
+ "Add": "Legg til",
+ "AddDotDotDot": "Legg til...",
+ "AddToNamesListCaseSensitive": "Legg til i navneliste (skiller mellom store/små bokstaver)",
+ "AddToUserDictionary": "Legg til i brukerordbok",
+ "AddVideoFiles": "Legg til videofiler...",
+ "AdjustAlpha": "Juster alfa (gjennomsiktighet)",
+ "AdjustDisplayDuration": "Juster visningsvarighet",
+ "Adjustment": "Justering",
+ "Advanced": "Avansert",
+ "AdvancedSettings": "Avanserte innstillinger",
+ "After": "Etter",
+ "Alignment": "Justering",
+ "AlignmentDotDotDot": "Justering...",
+ "AlignmentX": "Sett justering \"{0}\" for valgte linjer",
+ "All": "Alle",
+ "AllFiles": "Alle filer",
+ "AlphaAdjustment": "Alfajustering",
+ "AphaThreshold": "Alfaterskel",
+ "ApiKey": "API-nøkkel",
+ "ApiSecret": "Hemmelighet",
+ "Appearance": "Utseende",
+ "Append": "Legg til på slutten",
+ "Apply": "Bruk",
+ "ApplyTo": "Bruk på",
+ "Ascending": "Stigende",
+ "AttachDotDotDot": "Legg ved...",
+ "AudioFiles": "Lydfiler",
+ "AudioVisualizer": "Lydvisualiserer",
+ "Auto": "Auto",
+ "AutoBreak": "Automatisk linjedeling",
+ "AutoContinue": "Auto-fortsett",
+ "AutoTranslate": "Auto-oversett",
+ "Autodetect": "Oppdag automatisk",
+ "Background": "Bakgrunn",
+ "BackgroundColor": "Bakgrunnsfarge",
+ "Backward": "Bakover",
+ "BatchMode": "Satsvis modus (batch)",
+ "BdnXml": "BDN/xml",
+ "Before": "Før",
+ "BeforeX": "Før \"{0}\"",
+ "Beginning": "Begynnelse",
+ "BluRaySup": "Blu-ray (sup)",
+ "Bold": "Fet",
+ "BookmarkAdd": "Legg til bokmerke",
+ "BookmarkAddForSelectedLinesX": "Legg til bokmerke for {0} valgte linjer",
+ "BookmarkClearQuestion": "Tøm alle bokmerker?",
+ "BookmarkDeleteSelectedQuestion": "Slett valgt bokmerke?",
+ "BookmarkDotDotDot": "Bokmerke...",
+ "BookmarkEdit": "Rediger bokmerke",
+ "BookmarkEditForSelectedLinesX": "Rediger bokmerke for {0} valgte linjer",
+ "BookmarksList": "Vis bokmerker",
+ "BorderColor": "Kantfarge",
+ "BorderStyle": "Kantstil",
+ "BottomCenter": "Bunn-Senter",
+ "BottomLeft": "Bunn-Venstre",
+ "BottomRight": "Bunn-Høyre",
+ "Box": "Boks",
+ "BoxColor": "Boksfarge",
+ "BoxCornerRadius": "Boks hjørneradius",
+ "BoxPerLine": "Boks per linje",
+ "BridgeGaps": "Tett hull",
+ "Cancel": "A_vbryt",
+ "Cancelled": "Avbrutt",
+ "CaseInsensitive": "Skiller ikke mellom store/små bokstaver",
+ "CaseSensitive": "Skiller mellom store/små bokstaver",
+ "Category": "Kategori",
+ "Center": "Senter",
+ "CenterHorizontally": "Midtstill horisontalt",
+ "CenterVertically": "Midtstill vertikalt",
+ "Change": "Endre",
+ "ChangeAll": "Endre alle",
+ "ChangeCasing": "Endre bokstavstørrelse",
+ "ChangeFormatting": "Endre formatering",
+ "ChangeFrameRate": "Endre bildefrekvens",
+ "ChangeLanguageFilter": "Endre språkfilter...",
+ "ChangeOnce": "Endre én gang",
+ "ChangeSpeed": "Endre hastighet",
+ "Character": "Tegn",
+ "Characters": "Tegn",
+ "CharsPerSec": "Tegn/sek",
+ "ChooseColorDotDotDot": "Velg farge...",
+ "ChooseImageFiles": "Velg bildefiler",
+ "Class": "Klasse",
+ "Classic": "Klassisk",
+ "Clear": "Tøm",
+ "Close": "Lukk",
+ "Codec": "Kodek",
+ "Collapse": "Skjul",
+ "Color": "Farge",
+ "ColorDotDotDot": "Farge...",
+ "Column": "Kolonne",
+ "ConsoleLog": "Konsollogg",
+ "ContentAlignment": "Innholdsjustering",
+ "ConversionCancelledByUser": "Konvertering avbrutt av bruker",
+ "Convert": "Konverter",
+ "Converted": "Konvertert",
+ "ConvertingDotDotDot": "Konverterer...",
+ "ConvertingXofYDotDoDot": "Konverterer {0:#,###,##0}/{1:#,###,##0}...",
+ "Copy": "Kopier",
+ "CopyImageToClipboard": "Kopier bilde til utklippstavle",
+ "CopyTextToClipboard": "Kopier tekst til utklippstavle",
+ "CouldNotSaveFileXErrorY": "Kunne ikke lagre fil \"{0}\". Feil: {1}",
+ "Count": "Antall",
+ "Cps": "Tegn/sek",
+ "CurrentSubtitle": "Nåværende undertekst",
+ "CurrentVideoPosition": "Nåværende videoposisjon",
+ "Cut": "Klipp ut",
+ "Dark": "Mørk",
+ "DateAndTime": "Dato og tid",
+ "Default": "Standard",
+ "Delete": "Slett",
+ "DeleteAtPosition": "Slett undertekst ved videoposisjon",
+ "DeleteCurrentLine": "Slett gjeldende linje",
+ "DeleteFirstLines": "Slett første linjer",
+ "DeleteLastLines": "Slett siste linjer",
+ "DeleteLineXPrompt": "Slett linjenummer {0}?",
+ "DeleteLines": "Slett linjer",
+ "DeleteLinesContainingText": "Slett linjer som inneholder tekst",
+ "DeleteXLinesPrompt": "Slett {0} linjer?",
+ "Description": "Beskrivelse",
+ "Dictionary": "Ordbok",
+ "DiskSpace": "Diskplass",
+ "DoNoChange": "Ikke endre",
+ "Done": "Ferdig",
+ "DoubleWords": "Doble ord",
+ "DoubleLines": "Doble linjer",
+ "Download": "Last ned",
+ "DownloadX": "Last ned {0}",
+ "DownloadingX": "Laster ned {0}",
+ "DownloadingXPercent": "Laster ned {0}%",
+ "Duplicate": "Dupliser",
+ "Duration": "Varighet",
+ "DurationMinutes": "Varighet i minutter",
+ "Edit": "Rediger",
+ "EditDotDotDot": "Rediger...",
+ "Editing": "Redigering",
+ "Effect": "Effekt",
+ "Enabled": "Aktivert",
+ "Encoding": "Koding",
+ "EndTime": "Sluttid",
+ "Engine": "Motor",
+ "EnterProfileName": "Skriv inn profilnavn",
+ "Error": "Feil",
+ "ErrorX": "Feil; {0}",
+ "Example": "Eksempel",
+ "ExampleX": "Eksempel: {0}",
+ "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)",
+ "ExtendSelectedToNext": "Utvid valgte til neste",
+ "ExtendSelectedToPrevious": "Utvid valgte til forrige",
+ "ExtractingAudioClips": "Trekker ut lydklipp...",
+ "Fade": "Ton",
+ "FetchFirstWordFromNextSubtitle": "Hent første ord fra neste undertekst",
+ "FileAlreadyExists": "Filen finnes allerede",
+ "FileExtension": "Filtype",
+ "FileName": "Filnavn",
+ "FileNameX": "Filnavn: {0}",
+ "FileNameXAndSize": "Filnavn: {0} ({1})",
+ "FileSaved": "Fil lagret",
+ "FileSavedToX": "Fil lagret i {0}",
+ "FileXAlreadyExists": "Filen \"{0}\" finnes allerede.",
+ "FileXOfY": "Fil {0} av {1}",
+ "Filter": "Filter",
+ "FilterByLayer": "Filtrer etter lag",
+ "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",
+ "FixRightToLeftViaUnicodeTags": "Fiks høyre-til-venstre via Unicode-koder",
+ "FixedValue": "Fast verdi",
+ "FocusSelectedLine": "Fokus på valgt linje (rull inn i visning i rutenettet)",
+ "Font": "Skrift",
+ "FontColor": "Skriftfarge",
+ "FontHeight": "Skrifthøyde",
+ "FontName": "Skriftnavn",
+ "FontNameDotDotDot": "Skriftnavn...",
+ "FontSize": "Skriftstørrelse",
+ "Fonts": "Skrifter",
+ "Footer": "Bunntekst",
+ "Forced": "Tvunget",
+ "Foreground": "Forgarunn",
+ "Format": "Format",
+ "Forward": "Fremover",
+ "FoundNoMatches": "Fant ingen treff",
+ "FoundOneMatch": "Fant ett treff",
+ "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",
+ "Gap": "Mellomrom",
+ "General": "Generelt",
+ "GeneralText": "Generell tekst",
+ "Generate": "Generer",
+ "GenerateImportShotChanges": "Generer/importer sceneskifter",
+ "Generating": "Genererer...",
+ "GeneratingImageXofY": "Genererer bilde {0:#,##0} av {1:#,##0}...",
+ "GeneratingWavFile": "Genererer wav-fil...",
+ "GetAudioClips": "Hent lydklipp",
+ "GoTo": "Gå til",
+ "GoToLineNumber": "Gå til linjenummer",
+ "GoToNextShotChange": "Gå til neste sceneskifte",
+ "GoToPreviousShotChange": "Gå til forrige sceneskifte",
+ "GoogleIt": "Søk på Google ",
+ "Group": "Gruppe",
+ "Header": "Topptekst",
+ "Height": "Høyde",
+ "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",
+ "ImagedBasedSubtitles": "Bildebaserte undertekster",
+ "Images": "Bilder",
+ "ImagesWithTimeCode": "Bilder med tidskode",
+ "Import": "Importer",
+ "ImportDotDotDot": "Importer...",
+ "Include": "Inkluder",
+ "Information": "Informasjon",
+ "InsertAfter": "Sett inn etter",
+ "InsertAtPositionAndFocusTextBox": "Sett inn undertekst ved videoposisjon og fokuser på tekstboks",
+ "InsertAtPositionNoFocusTextBox": "Sett inn undertekst ved videoposisjon (uten fokus på tekstboks)",
+ "InsertBefore": "Sett inn før",
+ "InsertLine": "Sett inn linje",
+ "InsertNewSelection": "Sett inn nytt utvalg",
+ "InsertSubtitleAfterCurrentLine": "Sett inn undertekst etter gjeldende linje...",
+ "InsertSubtitleFileAtVideoPositionDotDotDot": "Sett inn undertekstfil ved videoposisjon...",
+ "InspectAdditions": "Inspiser tillegg...",
+ "InvertSelection": "Inverter utvalg",
+ "IsDefault": "Er standard",
+ "Italic": "Kursiv",
+ "KeepExistingTimeCodes": "Behold eksisterende tidskoder (ikke legg til videoforskyvning)",
+ "KeyFile": "Nøkkelfil",
+ "Language": "Språk",
+ "LanguagePostFix": "Språk-suffiks (mkv/mp4)",
+ "Layer": "Lag",
+ "LayerFilterOn": "Lagfilter på",
+ "Left": "Venstre",
+ "Light": "Lys",
+ "LineHeigth": "Linjehøyde",
+ "LineNumber": "Linje#",
+ "LineXColumnY": "Linje {0}, kolonne {1}",
+ "Lines": "Linjer",
+ "LinesAddedX": "Linjer lagt til: {0}",
+ "LinesChangedX": "Linjer endret: {0}",
+ "LinesDeletedX": "Linjer slettet: {0}",
+ "ListErrors": "Vis feil",
+ "LoadDefaults": "Last standardinnstillinger",
+ "LockTimeCodes": "Lås tidskoder",
+ "Logo": "Logo",
+ "Margin": "Margin",
+ "Match": "Treff",
+ "MaxCharactersPerSecond": "Maks tegn per sekund",
+ "MediaInformation": "Medieinformasjon",
+ "MergeAfter": "Slå sammen med linjen etter",
+ "MergeBefore": "Slå sammen med linjen før",
+ "MergeLines": "Slå sammen linjer",
+ "MergeLinesWithSameText": "Slå sammen linjer med samme tekst",
+ "MergeLinesWithSameTimeCodes": "Slå sammen linjer med samme tidskoder",
+ "MergeSelected": "Slå sammen valgte",
+ "MergeSelectedAsDialog": "Slå sammen valgte som dialog",
+ "MergeSelectedLines": "Slå sammen valgte linjer",
+ "MergeSelectedLinesDialog": "Slå sammen valgte linjer som dialog",
+ "MergeWithLineAfterAndAutoBreak": "Slå sammen med linjen etter og automatisk linjedeling",
+ "MergeWithLineAfterKeepBreaks": "Slå sammen med linjen etter (behold linjeskift)",
+ "MergeWithLineBeforeAndAutoBreak": "Slå sammen med linjen før og automatisk linjedeling",
+ "MergeWithLineBeforeKeepBreaks": "Slå sammen med linjen før (behold linjeskift)",
+ "MiddleCenter": "Midt-Senter",
+ "MiddleLeft": "Midt-Venstre",
+ "MiddleRight": "Midt-Høyre",
+ "Milliseconds": "Millisekunder",
+ "Model": "Modell",
+ "Models": "Modeller",
+ "More": "Mer",
+ "MoreInfo": "Mer info",
+ "MoveAllShotChangeOneFrameBack": "Flytt alle sceneskifter ett bilde bakover",
+ "MoveAllShotChangeOneFrameForward": "Flytt alle sceneskifter ett bilde fremover",
+ "MoveDown": "Flytt ned",
+ "MoveUp": "Flytt opp",
+ "MultipleReplace": "Søk og erstatt flere",
+ "Name": "Navn",
+ "Negative": "Negativ",
+ "New": "Ny",
+ "NewDotDotDot": "Ny...",
+ "NewProfile": "Ny profil",
+ "NewSubtitleStartKeyDownSetEndKeyUp": "Sett inn undertekst: Start ved tast ned, sett slutt ved tast opp",
+ "SetSubtitleStartAtVideoPositionSetEndAtKeyUpAndGoToNext": "Sett start ved videoposisjon, sett slutt ved tast opp, og gå til neste",
+ "No": "Nei",
+ "NoFilesToConvert": "Ingen filer å konvertere",
+ "NoLanguageCode": "Ingen språkkode",
+ "NoSubtitleLoaded": "Ingen undertekst lastet",
+ "NoSubtitlesFound": "Ingen undertekster funnet!",
+ "NoSymbolLines": "#Linjer",
+ "NoVideoLoaded": "Ingen video lastet",
+ "None": "Ingen",
+ "NormalCasing": "Normal bokstavstørrelse",
+ "NotAvailable": "Ikke tilgjengelig",
+ "NotInstalled": "Ikke installert",
+ "Number": "Nummer",
+ "NumberSymbol": "#",
+ "OcrDotDotDot": "OCR...",
+ "OcrPercentX": "OCR: {0}%",
+ "Offset": "Forskyvning",
+ "OffsetTimeCodes": "Forskyv tidskoder",
+ "OffsetX": "Forskyvning X",
+ "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...",
+ "OpenVideoFileTitle": "Åpne videofil",
+ "OptimalCharactersPerSecond": "Optimalt antall tegn per sekund",
+ "Options": "Alternativer",
+ "OriginalText": "Original tekst",
+ "Outline": "Omriss",
+ "OutlineColor": "Omrissfarge",
+ "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?",
+ "Padding": "Utfylling (padding)",
+ "Parameters": "Parametere",
+ "ParsingXDotDotDot": "Analyserer {0}...",
+ "Paste": "Lim inn",
+ "PasteNewSelection": "Lim inn tekst fra utklippstavlen til nytt utvalg",
+ "Pause": "Pause",
+ "Percent": "Prosent",
+ "PickLayer": "Velg lag",
+ "PickOllamaModel": "Velg Ollama-modell",
+ "PickOutputFolder": "Velg utdatamappe",
+ "PickResolutionFromCurrentVideo": "Hent oppløsning fra gjeldende video",
+ "PickResolutionFromVideoDotDotDot": "Hent oppløsning fra video...",
+ "PickSubtitleFile": "Velg undertekstfil...",
+ "PickVideoFile": "Velg videofil...",
+ "PickVideoPosition": "Velg videoposisjon",
+ "Play": "Spill av",
+ "PlayFromStartOfVideo": "Spill fra starten av videoen",
+ "PlayNext": "Spill neste",
+ "PlaySelectedLines": "Spill valgte linjer",
+ "PlaySelectedLinesWithLoop": "Spill valgte linjer med loop",
+ "PleaseEnterAValidValueForX": "Vennligst skriv inn en gyldig verdi for \"{0}\"",
+ "PleaseWait": "Vennligst vent...",
+ "Position": "Posisjon",
+ "PositionX": "Posisjon: {0}",
+ "PostProcessing": "Etterbehandling",
+ "PoweredBy": "Drevet av",
+ "Prefix": "Prefiks",
+ "Preview": "Forhåndsvisning",
+ "Profile": "Profil",
+ "ProfileName": "Profilnavn",
+ "Profiles": "Profiler",
+ "Property": "Egenskap",
+ "Question": "Spørsmål",
+ "ReDownloadX": "Last ned {0} på nytt",
+ "Reason": "Årsak",
+ "RecentFiles": "Nylige filer",
+ "Redo": "Gjør om",
+ "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",
+ "RemoveAllFormatting": "Fjern all formatering",
+ "RemoveBlankLines": "Fjern tomme linjer",
+ "RemoveBold": "Fjern fet skrift",
+ "RemoveColor": "Fjern farge",
+ "RemoveFilter": "Fjern filter",
+ "RemoveFontName": "Fjern skriftnavn",
+ "RemoveFormatting": "Fjern formatering",
+ "RemoveItalic": "Fjern kursiv",
+ "RemoveRightToLeftUnicodeTags": "Fjern høyre-til-venstre Unicode-koder",
+ "RemoveSelectedFile": "Fjern valgt fil?",
+ "RemoveStyling": "Fjern stil",
+ "RemoveTextForHearingImpaired": "Fjern tekst for hørselshemmede",
+ "RemoveUnderline": "Fjern understreking",
+ "Rename": "Gi nytt navn",
+ "Replace": "Erstatt",
+ "ReplaceWith": "Erstatt med",
+ "RequiresRestart": "Krever omstart",
+ "Reset": "Tilbakestill",
+ "Resolution": "Oppløsning",
+ "ResolutionX": "Oppløsning: {0}",
+ "ReverseRightToLeftStartEnd": "Reverser høyre-til-venstre start/slutt",
+ "Right": "Høyre",
+ "RightToLeft": "Høyre til venstre",
+ "Rules": "Regler",
+ "SaveChangesMessage": "Vil du lagre endringer i den gjeldende undertekstfilen?",
+ "SaveChangesTitle": "Lagre endringer?",
+ "SaveChangesToX": "Vil du lagre endringer i \"{0}\"?",
+ "SaveChangesToXOriginal": "Vil du lagre endringer i den originale undertekstfilen \"{0}\"?",
+ "SaveDotDotDot": "Lagre...",
+ "SaveFileAsTitle": "Lagre fil som",
+ "SaveImageAs": "Lagre bilde som",
+ "SaveImageAsDotDotDot": "Lagre bilde som...",
+ "SaveOriginalAsTitle": "Lagre original som",
+ "SaveTranslationAsTitle": "Lagre oversettelse som",
+ "SaveVideoAsVideoTitle": "Lagre video som",
+ "SavedChangesToX": "Lagret \"{0}\"",
+ "SavedChangesToXAndY": "Lagret \"{0}\" og \"{1}\"",
+ "SavingDotDotDot": "Lagrer...",
+ "Script": "Skript",
+ "Search": "Søk",
+ "SearchDirection": "Søkeretning",
+ "SearchFontNames": "Søk i skriftnavn...",
+ "SearchSubtitleFormats": "Søk i undertekstformater",
+ "Seconds": "Sekunder",
+ "SelectAll": "Velg alle",
+ "SelectFilesToConvert": "Velg filer som skal konverteres",
+ "SelectNone": "Velg ingen",
+ "SelectSaveFolder": "Velg en mappe å lagre i",
+ "SelectSubtitle": "Velg undertekst",
+ "SelectedAFolderToSaveTo": "Valgt en mappe å lagre i",
+ "SelectedLines": "Valgte linjer",
+ "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",
+ "SetEndAndOffsetTheRest": "Sett slutt og forskyv resten",
+ "SetFontDotDotDot": "Velg skrift...",
+ "SetStart": "Sett start",
+ "SetStartAndOffsetTheRest": "Sett start og forskyv resten",
+ "SetVideoOffset": "Sett videoforskyvning",
+ "Settings": "Innstillinger",
+ "Shadow": "Skygge",
+ "ShadowColor": "Skyggefarge",
+ "ShadowWidth": "Skyggebredde",
+ "Shortcut": "Hurtigtast",
+ "ShortcutX": "Hurtigtast: {0}",
+ "Shortcuts": "Hurtigtaster",
+ "Show": "Vis",
+ "ShowActorColumn": "Vis \"Skuespiller\"-kolonne",
+ "ShowCpsColumn": "Vis \"Tegn/sek\"-kolonne",
+ "ShowDurationColumn": "Vis \"Varighet\"-kolonne",
+ "ShowGapColumn": "Vis \"Mellomrom\"-kolonne",
+ "ShowStartColumn": "Vis \"Start\"-kolonne",
+ "ShowHideColumn": "Vis \"Skjul\"-kolonne",
+ "ShowHistory": "Vis historikk",
+ "ShowLayerColumn": "Vis \"Lag\"-kolonne",
+ "ShowPreview": "Vis forhåndsvisning",
+ "ShowShotChangesList": "Vis liste over sceneskifter",
+ "ShowStyleColumn": "Vis \"Stil\"-kolonne",
+ "ShowTimeCodes": "Vis tidskoder",
+ "ShowWpmColumn": "Vis \"Ord/min\"-kolonne",
+ "ShowPixelWidthColumn": "Vis \"Pikselbredde\"-kolonne",
+ "Shrink": "Krymp",
+ "SingleBox": "Enkeltboks",
+ "SingleLineLengths": "Enkeltlinjelengde:",
+ "SingleMode": "Enkeltmodus",
+ "Size": "Størrelse",
+ "SizeX": "Størrelse: {0}",
+ "Skip": "Hopp over",
+ "SkipAll": "Hopp over alle",
+ "SkipOnce": "Hopp over én gang",
+ "Smart": "Smart",
+ "SnapSelectedLinesToNearestShotChange": "Fest valgte linjers start/slutt til nærmeste sceneskifte",
+ "SolidColor": "Helfarge",
+ "SourceViewX": "Kildevisning - {0}",
+ "Spacing": "Avstand",
+ "SpeechToTextSelectedLines": "Tale til tekst (valgte) (se Alternativer - Innstillinger)",
+ "SpeechToTextSelectedLinesPromptAlways": "Tale til tekst for valgte linjer (spør alltid om motor/språk)",
+ "SpeechToTextSelectedLinesPromptFirstTime": "Tale til tekst for valgte linjer (spør om motor/språk kun første gang)",
+ "Speed": "Hastighet",
+ "SplitAtTextBoxCursorPosition": "Del ved skrivemarkørposisjon",
+ "SplitLine": "Del linje",
+ "SplitLineAtTextBoxCursorPosition": "Del linje ved markørposisjon",
+ "SplitLineAtVideoAndTextBoxPosition": "Del linje ved video- og tekstboksposisjon",
+ "SplitLineAtVideoPosition": "Del linje ved videoposisjon",
+ "StartFrom": "Start fra",
+ "StartTime": "Starttid",
+ "StartingDotDotDot": "Starter...",
+ "Status": "Status",
+ "Stereo": "Stereo",
+ "Stop": "Stopp",
+ "Strikeout": "Gjennomstrek",
+ "Style": "Stil",
+ "StyleExaggeration": "Stiloverdrivelse",
+ "StyleLanguage": "Stil / Språk",
+ "Styles": "Stiler",
+ "SubtitleFile": "Undertekstfil",
+ "SubtitleFileName": "Undertekstfilnavn",
+ "SubtitleFileSaved": "Undertekstfil lagret",
+ "SubtitleFileSavedToX": "Undertekstfil lagret i {0}",
+ "SubtitleFiles": "Undertekstfiler",
+ "SubtitleFormats": "Undertekstformater",
+ "SubtitleLoadedX": "Undertekst lastet: {0}",
+ "SubtitleXOfY": "Undertekst {0} av {1}",
+ "Suffix": "Suffiks",
+ "Suggestions": "Forslag",
+ "Sync": "Synkronisering",
+ "SyntaxColoring": "Syntaksfarging",
+ "System": "System",
+ "TargetEncoding": "Målkoding",
+ "TargetFormat": "Målformat",
+ "TenHours": "10 timer",
+ "TenMilliseconds": "10 millisekunder",
+ "Text": "Tekst",
+ "TextColor": "Tekstfarge",
+ "TextFiles": "Tekstfiler",
+ "TextOrImage": "Tekst/bilde",
+ "ThreeLetterLanguageCode": "Trebokstavs språkkode",
+ "Time": "Tid",
+ "TimeCodes": "Tidskoder",
+ "Timing": "Tidsberegning",
+ "Title": "Tittel",
+ "To": "Til",
+ "ToggleCasing": "Veksle bokstavstørrelse",
+ "ToggleDirection": "Veksle retning",
+ "ToggleForced": "Veksle tvunget",
+ "ToggleShotChangesAtVideoPosition": "Veksle sceneskifter ved videoposisjon",
+ "Toolbar": "Verktøylinje",
+ "Tools": "Verktøy",
+ "TopCenter": "Topp-Senter",
+ "TopLeft": "Topp-Venstre",
+ "TopRight": "Topp-Høyre",
+ "TotalAdjustmentX": "Total justering: {0}",
+ "TotalFramesX": "Totalt antall bilder: {0:#;##0.##}",
+ "TotalLengthX": "Total lengde: {0}",
+ "TotalLengthXSplitLine": "Total lengde: {0} (delt linje!)",
+ "Translate": "Oversett",
+ "TranslateRow": "Oversett rad",
+ "Translation": "Oversettelse",
+ "TwoLetterLanguageCode": "Tobokstavs språkkode",
+ "Type": "Type",
+ "Unbreak": "Fjern linjedeling",
+ "UnbreakLines": "Fjern linjedeling på linjer",
+ "Underline": "Understrek",
+ "Undo": "Angre",
+ "Unknown": "Ukjent",
+ "UnknownSubtitleFormat": "Ukjent undertekstformat",
+ "Unpacking7ZipArchiveDotDotDot": "Pakker ut 7-zip-arkiv...",
+ "UnpackingX": "Pakker ut {0}",
+ "Untitled": "Uten tittel",
+ "Update": "Oppdater",
+ "UpdateAndClose": "Oppdater og lukk",
+ "UpdateDetails": "Oppdateringsdetaljer",
+ "UpdatedBy": "Oppdatert av",
+ "Url": "URL",
+ "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",
+ "Video500MsBack": "Video, 500 millisekunder bakover",
+ "Video500MsForward": "Video, 500 millisekunder fremover",
+ "VideoCustom1BackX": "Video, egendefinerte millisekunder ({0:#,###,##0}) bakover, 1",
+ "VideoCustom1ForwardX": "Video, egendefinerte millisekunder ({0:#,###,##0}) fremover, 1",
+ "VideoCustom2BackX": "Video, egendefinerte millisekunder ({0:#,###,##0}) bakover, 2",
+ "VideoCustom2ForwardX": "Video, egendefinerte millisekunder ({0:#,###,##0}) fremover, 2",
+ "VideoEncodingX": "Videokoding: {0}",
+ "VideoExtension": "Videofiltype",
+ "VideoFile": "Videofil",
+ "VideoFileGeneratedX": "Videofil generert: \"{0}\"",
+ "VideoFiles": "Videofiler",
+ "VideoInformation": "Videoinfo",
+ "VideoOffset": "Videoforskyvning",
+ "VideoOneFrameBack": "Video, ett bilde bakover",
+ "VideoOneFrameForward": "Video, ett bilde fremover",
+ "VideoOneSecondBack": "Video, ett sekund bakover",
+ "VideoOneSecondForward": "Video, ett sekund fremover",
+ "VideoPlayer": "Videospiller",
+ "VideoPosition": "Videoposisjon",
+ "VideoResolution": "Videooppløsning",
+ "ViewX": "Vis {0}",
+ "Visible": "Synlig",
+ "Voice": "Stemme",
+ "Warning": "Advarsel",
+ "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",
+ "XFiles": "{0:#,###,##0} filer",
+ "XFilesConvertedInY": "{0:#,###,##0} filer konvertert på {1}",
+ "XNotFound": "\"{0}\" ikke funnet",
+ "XRequiresAnApiKey": "{0} krever en API-nøkkel",
+ "XSeconds": "{0:0.0##} sekunder",
+ "XSubtitles": "{0:#,###,##0} undertekster",
+ "Yes": "Ja",
+ "CopyToClipboard": "Kopier til utklippstavle",
+ "PlayCurrent": "Spill gjeldende",
+ "LeftMargin": "Venstre marg",
+ "RightMargin": "Høyre marg",
+ "Installed": "Installert",
+ "AdvancedDotDotDot": "Avansert...",
+ "ChooseAlignment": "Velg justering",
+ "MaxWidthPixels": "Maks bredde (piksler)",
+ "SampleText": "Eksempeltekst",
+ "BoxWidthPixels": "Boksbredde (piksler)",
+ "FadeInOut": "Fade inn/ut",
+ "Alpha": "Alfa",
+ "PickResolution": "Velg oppløsning",
+ "ManualSync": "Manuell synkronisering"
+ },
+ "Main": {
+ "AudioTrackIsNowX": "Lydspor er nå \"{0}\"",
+ "AudioTrackX": "Lydspor {0}",
+ "AutoBreakHint": "Del opp valgte linjer automatisk",
+ "CharactersPerSecond": "Tegn/sekund: {0}",
+ "ChooseColumn": "Velg kolonne",
+ "ColumnPaste": "Lim inn i kolonne",
+ "CreatedEmptyTranslation": "Opprettet tom oversettelse fra gjeldende undertekst",
+ "DeleteText": "Slett tekst",
+ "DeleteTextAndShiftCellsUp": "Slett tekst og flytt celler opp",
+ "EndTimeMustBeAfterStartTime": "Sluttid må være etter starttid.",
+ "ErrorLoad7Zip": "Denne filen ser ut til å være en komprimert 7-Zip-fil.\n\nSubtitle Edit kan ikke åpne komprimerte filer.",
+ "ErrorLoadBinaryZeroes": "Beklager, denne filen inneholder bare binære nuller!\n\nHvis du har redigert denne filen med Subtitle Edit, kan du kanskje finne en sikkerhetskopi via menypunktet Fil -> Gjenopprett auto-sikkerhetskopi...",
+ "ErrorLoadGZip": "Denne filen ser ut til å være en komprimert GZip-fil.\n\nSubtitle Edit kan ikke åpne komprimerte filer.",
+ "ErrorLoadJpg": "Denne filen ser ut til å være en JPG-bildefil.\n\nSubtitle Edit kan ikke åpne bildefiler.",
+ "ErrorLoadPng": "Denne filen ser ut til å være en PNG-bildefil.\n\nSubtitle Edit kan ikke åpne bildefiler.",
+ "ErrorLoadRar": "Denne filen ser ut til å være en komprimert 7-Zip-fil.\n\nSubtitle Edit kan ikke åpne komprimerte filer.",
+ "ErrorLoadSrr": "Denne filen ser ut til å være en ReScene SRR-fil.\n\nSubtitle Edit kan ikke åpne SRR-filer.",
+ "ErrorLoadTorrent": "Denne filen ser ut til å være en BitTorrent-fil.\n\nSubtitle Edit kan ikke åpne torrent-filer.",
+ "ErrorLoadZip": "Denne filen ser ut til å være en komprimert ZIP-fil.\n\nSubtitle Edit kan ikke åpne komprimerte filer.",
+ "ExtractingWaveInfo": "Trekker ut bølgeinformasjon...",
+ "ExtractingShotChanges": "Trekker ut sceneskifter...",
+ "FailedToExtractWaveInfo": "Kunne ikke trekke ut bølgeinformasjon.",
+ "FixedRightToLeftUsingUnicodeControlCharactersX": "Fikset høyre-til-venstre ved hjelp av Unicode-kontrolltegn i {0} linjer",
+ "GeneratingSpectrogramDotDotDot": "Genererer spektrogram...",
+ "GeneratingWaveformDotDotDot": "Genererer bølgeform...",
+ "InsertEmptyTextAndShiftCellsDown": "Sett inn tom tekst og flytt celler ned",
+ "InsertTextFromSubtitleDotDotDot": "Sett inn tekst fra undertekst...",
+ "CopyTextFromOriginalToCurrent": "Kopier tekst fra original til gjeldende undertekst",
+ "InsertedXTextsFromSubtitleY": "Satte inn {0} tekster fra undertekstfil \"{1}\"",
+ "ItalicHint": "Kursiv for valgte linjer/tekst",
+ "JoinedSubtitleLoaded": "Sammenslått undertekst lastet inn",
+ "LineXTextAndTimingChanged": "Linje {0}: Tekst og tidsberegning endret",
+ "LineXTextChangedFromYToZ": "Linje {0}: Tekst endret fra \"{1}\" til \"{2}\"",
+ "LineXTimingChanged": "Linje {0}: Tidsberegning endret",
+ "LoadingWaveInfoFromCache": "Laster bølgeinformasjon fra hurtigbuffer...",
+ "NoTextInClipboard": "Ingen tekst på utklippstavlen",
+ "OneLineCopiedFromOriginal": "Én linje kopiert fra original undertekst",
+ "OneLineMerged": "Én linje slått sammen",
+ "OneLineSwitched": "Én linje byttet",
+ "OverwriteExistingCells": "Overskriv eksisterende celler",
+ "OverwriteOrShiftCellsDown": "Overskriv/flytt celler ned",
+ "ParsingMatroskaFile": "Analyserer Matroska-fil...",
+ "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",
+ "SaveXFileAs": "Lagre {0}-fil som",
+ "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}",
+ "SubtitleImportedFromMatroskaFile": "Undertekst importert fra Matroska-fil",
+ "TextDown": "Tekst ned",
+ "TextOnly": "Kun tekst",
+ "TextUp": "Tekst opp",
+ "TimeCodesOnly": "Kun tidskoder",
+ "XPropertiesDotDotDot": "{0} egenskaper...",
+ "TotalCharacters": "Totalt antall tegn: {0}",
+ "UnbreakHint": "Fjern linjedeling på valgte linjer",
+ "UndoPerformed": "Angre utført",
+ "UndoPerformedXActionLeft": "Angre utført (handlinger igjen: {0})",
+ "XLinesCopiedFromOriginal": "{0} linjer kopiert fra original undertekst",
+ "XLinesMerged": "X linjer slått sammen",
+ "XLinesSelectedOfY": "{0} linjer valgt av {1}",
+ "XLinesSwitched": "{0} linjer byttet",
+ "XShotChangedLoaded": "{0} sceneskifter lastet inn",
+ "YoutubeDlDownloadedSuccessfully": "\"yt-dlp\" lastet ned vellykket.",
+ "YoutubeDlNotInstalledDownloadNow": "\"yt-dlp\" er ikke installert og kreves for å spille av online videoer.\n\nLast ned nå?",
+ "InsertUnicodeSymbol": "Sett inn Unicode-symbol",
+ "TrimmedXLines": "Trimmet {0} undertekstlinjer",
+ "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?",
+ "VideoOpenedChangeLayoutQuestion": "En videofil er åpnet.\n\nVil du endre oppsettet for å vise videopanelet?",
+ "SortedByStartTime": "Sortert etter \"Vis\"-tid",
+ "SortedByEndTime": "Sortert etter \"Skjul\"-tid",
+ "ColorHint": "Farg valgte linjer",
+ "RemoveFormattingHint": "Fjern formatering fra valgte linjer",
+ "AssaResolutionResamplerDone": "ASSA-oppløsning endret.",
+ "LanguageFileSavedToX": "Språkfil lagret til {0}",
+ "FileExportedInFormatXToY": "Fil eksportert i formatet {0} til {1}",
+ "FileExportedInFormatXToFileY": "Fil eksportert i formatet \"{0}\" til fil \"{1}\"",
+ "FixedXLines": "Fikset {0} linjer",
+ "TranscriptionCompletedWithXLines": "Transkripsjon fullført med {0} linjer",
+ "ReplacedXOccurrences": "Erstattet {0} forekomster",
+ "FfmpegDownloadedAndInstalledToX": "ffmpeg lastet ned og installert til {0}",
+ "NothingToSave": "Ingenting å lagre",
+ "NothingToSaveOriginal": "Ingenting å lagre (original)",
+ "LiveSpellCheckLanguageXLoaded": "Språk for direkte stavekontroll {0} lastet inn",
+ "DownloadFfmpegTitle": "Last ned FFmpeg?",
+ "DownloadFfmpegQuestion": "FFmpeg kreves for å spille av online videoer og for visse videoredigeringsfunksjoner.\n\nLast ned FFmpeg nå?",
+ "Menu": {
+ "File": "_Fil",
+ "New": "_Ny",
+ "NewKeepVideo": "Ny (behold _video)",
+ "Open": "_Åpne...",
+ "OpenKeepVideo": "Åpne (_behold video)...",
+ "OpenOriginal": "Åpne ori_ginal...",
+ "CloseOriginal": "_Lukk original",
+ "Reopen": "_Åpne på nytt...",
+ "ClearRecentFiles": "_Tøm nylige filer",
+ "RestoreAutoBackup": "Gjenopprett auto-_sikkerhetskopi...",
+ "Save": "_Lagre",
+ "SaveAs": "Lagre _som...",
+ "OpenContainingFolder": "Åpne inneholdende _mappe",
+ "Compare": "Sammenli_gn...",
+ "Statistics": "Stat_istikk...",
+ "Import": "_Importer",
+ "Export": "_Eksporter",
+ "Exit": "A_vslutt",
+ "Edit": "_Rediger",
+ "Undo": "_Angre",
+ "Redo": "Gjør om",
+ "ShowHistory": "_Vis historikk for angre...",
+ "Find": "_Finn...",
+ "FindNext": "Finn _neste",
+ "Replace": "_Erstatt...",
+ "MultipleReplace": "_Søk og erstatt flere...",
+ "GoToLineNumber": "_Gå til linjenummer...",
+ "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...",
+ "BridgeGaps": "Tett _hull...",
+ "ApplyMinGap": "Bruk min. mellomrom mellom undertekster...",
+ "ChangeCasing": "_Endre bokstavstørrelse...",
+ "ChangeFormatting": "Endre formatering...",
+ "FixCommonErrors": "_Fiks vanlige feil...",
+ "CheckAndFixNetflixErrors": "Sjekk og fiks Netfli_x-feil...",
+ "MakeEmptyTranslationFromCurrentSubtitle": "Lag ny _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...",
+ "Renumber": "Gjenummerer...",
+ "RemoveTextForHearingImpaired": "_Fjern tekst for hørselshemmede...",
+ "ConvertActors": "Konverter skuespillere...",
+ "JoinSubtitles": "_Slå sammen undertekster...",
+ "SplitSubtitle": "_Del opp undertekst...",
+ "AssaTools": "_ASSA-verktøy",
+ "AssaProgressBar": "Generer _fremdriftslinje...",
+ "AssaChangeResolution": "Endre _oppløsning...",
+ "AssaGenerateBackground": "Generer bakgrunns_bokser...",
+ "AssaApplyAdvancedEffects": "Bruk avanserte _effekter...",
+ "AssaApplyCustomOverrideTags": "Bruk _overstyringskoder...",
+ "AssaSetPosition": "_Angi posisjon...",
+ "AssaImageColorPicker": "_Fargevelger for bilde...",
+ "AssaDraw": "_Tegn...",
+ "AssaStyles": "S_tiler...",
+ "AssaProperties": "E_genskaper...",
+ "AssaAttachments": "_Vedlegg...",
+ "SpellCheckTitle": "_Stavekontroll",
+ "SpellCheck": "_Stavekontroll...",
+ "FindDoubleWords": "_Finn doble ord...",
+ "FindDoubleLines": "_Finn doble linjer...",
+ "AddNameToNamesList": "_Legg til navn i navneliste...",
+ "GetDictionaries": "_Hent ordbøker...",
+ "Video": "_Video",
+ "OpenVideo": "_Åpne video...",
+ "OpenVideoFromUrl": "Åpne video fra _nettadresse...",
+ "CloseVideoFile": "_Lukk videofil",
+ "AudioTracks": "_Lydspor",
+ "SpeechToText": "_Tale til tekst...",
+ "TextToSpeech": "_Tekst til tale...",
+ "SetVideoOffset": "Sett videoforskyvning...",
+ "UpdateVideoOffsetX": "Oppdater videoforskyvning fra {0}...",
+ "SmpteTiming": "SMPTE-tidsberegning (ikke-heltall bildefrekvens)",
+ "GenerateBurnIn": "Generer video med inn_brente undertekster...",
+ "GenerateTransparent": "_Generer gjennomsiktig video med undertekster...",
+ "GenerateImportShotChanges": "Generer/importer _sceneskifter...",
+ "ListShotChanges": "Vis liste over scenes_kifter...",
+ "UndockVideoControls": "_Koble fra videokontroller",
+ "DockVideoControls": "_Fest videokontroller",
+ "Synchronization": "S_ynkronisering",
+ "AdjustAllTimes": "_Juster alle tider...",
+ "ChangeFrameRate": "Endre _bildefrekvens...",
+ "ChangeSpeed": "Endre _hastighet...",
+ "VisualSync": "_Visuell synkronisering...",
+ "Options": "_Alternativer",
+ "Settings": "_Innstillinger...",
+ "Shortcuts": "H_urtigtaster...",
+ "WordLists": "_Ordlister...",
+ "ChooseLanguage": "_Velg språk for brukergrensesnitt...",
+ "Translate": "O_versett",
+ "AutoTranslate": "_Auto-oversett...",
+ "TranslateViaCopyPaste": "Auto-oversett via _kopier/lim inn...",
+ "HelpTitle": "_Hjelp",
+ "Help": "_Hjelp...",
+ "About": "_Om...",
+ "CheckForUpdates": "_Se etter oppdateringer...",
+ "FixRightToLeftViaUnicodeControlCharacters": "Fiks høyre-til-venstre via Unicode-kontrolltegn (valgte linjer)",
+ "RemoveUnicodeControlCharacters": "Fjern Unicode-kontrolltegn (valgte linjer)",
+ "ReverseRightToLeftStartEnd": "Reverser høyre-til-venstre start/slutt (valgte linjer)",
+ "PointSync": "_Punktsynkronisering...",
+ "PointSyncViaOther": "Punktsynkronisering via _annen undertekst...",
+ "SortSubtitles": "_Sorter undertekster...",
+ "SetLayer": "Velg lag...",
+ "FilterLayersForDisplayDotDotDot": "Filtrer lag for visning..."
+ },
+ "Toolbar": {
+ "NewHint": "Start en ny undertekstfil {0}",
+ "OpenHint": "Åpne en eksisterende undertekstfil {0}",
+ "OpenVideoHint": "Åpne en videofil {0}",
+ "SaveHint": "Lagre gjeldende undertekst {0}",
+ "SaveAsHint": "Lagre undertekst med nytt navn {0}",
+ "FindHint": "Finn tekst i undertekster {0}",
+ "ReplaceHint": "Søk og erstatt tekst {0}",
+ "SpellCheckHint": "Sjekk undertekster for skrivefeil {0}",
+ "FixCommonErrorsHint": "Fiks vanlige undertekstfeil {0}",
+ "SettingsHint": "Juster programinnstillinger og preferanser {0}",
+ "LayoutHint": "Endre oppsett for verktøylinje og paneler {0}",
+ "HelpHint": "Åpne hjelpenettsted {0}",
+ "AutoBreakHint": "Del opp lange linjer automatisk {0}",
+ "UnbreakHint": "Slå sammen undertekster med flere linjer til én linje {0}",
+ "AssaStylesHint": "Advanced Sub Station Alpha-stiler",
+ "AssaPropertiesHint": "Advanced Sub Station Alpha-egenskaper",
+ "AssaAttachmentsHint": "Advanced Sub Station Alpha-vedlegg",
+ "AssaDrawHint": "Tegn former i Advanced Sub Station Alpha"
+ },
+ "Waveform": {
+ "PlayPauseHint": "Spill av / Pause {0}",
+ "PlayNextHint": "Spill neste {0}",
+ "PlaySelectionHint": "Spill av utvalg {0}",
+ "SetStartAndOffsetTheRestHint": "Sett start for gjeldende undertekst og forskyv resten {0}",
+ "SetStartHint": "Sett start for gjeldende undertekst {0}",
+ "SetEndHint": "Sett slutt for gjeldende undertekst {0}",
+ "NewHint": "Sett inn ny undertekst ved videoposisjon {0}",
+ "CenterWaveformHint": "Sentrer bølgeform på gjeldende videoposisjon under avspilling {0}",
+ "ZoomHorizontalHint": "Zoom horisontalt {0}",
+ "ZoomVerticalHint": "Zoom vertikalt {0}",
+ "SelectCurrentLineWhilePlayingHint": "Velg gjeldende undertekst under avspilling {0}",
+ "VideoPosition": "Videoposisjon {0}",
+ "HideWaveformToolbar": "Skjul verktøylinje {0}",
+ "ResetZoomAndSpeed": "Tilbakestill zoom og avspillingshastighet {0}",
+ "RemoveBlankLines": "Fjern tomme linjer {0}",
+ "PlaySelectedRepeatHint": "Spill av valgt(e) undertekst(er) i repeterende modus {0}"
+ }
+ },
+ "File": {
+ "Compare": "Sammenlign",
+ "PreviousDifference": "Forrige forskjell",
+ "NextDifference": "Neste forskjell",
+ "SubtitlesNotAlike": "Undertekster har ingen likheter",
+ "XNumberOfDifference": "Antall forskjeller: {0}",
+ "XNumberOfDifferenceAndPercentChanged": "Antall forskjeller: {0} ({1:0.##}% av ord endret)",
+ "XNumberOfDifferenceAndPercentLettersChanged": "Antall forskjeller: {0} ({1:0.##}% av bokstaver endret)",
+ "ShowOnlyDifferences": "Bare forskjeller",
+ "IgnoreLineBreaks": "Ignorer linjeskift",
+ "IgnoreWhitespace": "Ignorer mellomrom",
+ "IgnoreFormatting": "Ignorer formatering",
+ "OnlyLookForDifferencesInText": "Se kun etter forskjeller i tekst",
+ "CannotCompareWithImageBasedSubtitles": "Kan ikke sammenligne med bildebaserte undertekster",
+ "StatisticsTitle": "Statistikk",
+ "ShowOnlyDifferencesInText": "Kun forskjeller i tekst",
+ "LoadXFromFile": "Last inn \"{0}\" fra fil",
+ "SaveCompareHtmlTitle": "Lagre HTML-fil for sammenligning",
+ "PickMatroskaTrackX": "Velg Matroska-spor - {0}",
+ "RosettaProperties": "Timed Text Rosetta IMSC-egenskaper",
+ "RosettaFontSize": "Skriftstørrelse (radhøyde)",
+ "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",
+ "OriginalEpisodeTitle": "Original episodetittel",
+ "TranslatedProgramTitle": "Oversatt programtittel",
+ "TranslatedEpisodeTitle": "Oversatt episodetittel",
+ "TranslatorsName": "Oversetterens navn",
+ "SubtitleListReferenceCode": "Referansekode for undertekstliste",
+ "CountryOfOrigin": "Opprinnelsesland",
+ "TimeCodeStatus": "Status for tidskode",
+ "TimeCodeStartOfProgramme": "Tidskode: Start på programmet",
+ "RevisionNumber": "Revisjonsnummer",
+ "MaxNoOfDisplayableChars": "Maks antall tegn per rad",
+ "MaxNumberOfDisplayableRows": "Maks antall rader",
+ "DiskSequenceNumber": "Disksekvensnummer",
+ "TotalNumberOfDisks": "Totalt antall disker",
+ "Import": "Importer...",
+ "TextAndTimingInformation": "Tekst- og tidsinformasjon",
+ "JustificationCode": "Justeringskode",
+ "VerticalPosition": "Vertikal posisjon",
+ "MarginTop": "Toppmarg (for toppjusterte undertekster)",
+ "MarginBottom": "Bunnmarg (for bunnjusterte undertekster)",
+ "NewLineRows": "Antall rader lagt til av en ny linje",
+ "Teletext": "Tekst-TV",
+ "UseBox": "Bruk boks rundt teksten",
+ "DoubleHeight": "Bruk dobbel høyde for tekst",
+ "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",
+ "DiscSequenceNumber": "Disksekvensnummer"
+ },
+ "Import": {
+ "ImportTimeCodes": "Importer tidskoder...",
+ "PlainTextDotDotDot": "Klartekst...",
+ "TitleImportPlainText": "Importer klartekst",
+ "ImagesForOcrDotDotDot": "Bilder for OCR...",
+ "TimeCodesDotDotDot": "Tidskoder...",
+ "SubtitleWithManuallyChosenEncodingDotDotDot": "_Undertekst med manuelt valgt koding...",
+ "TitleImportImages": "Importer bilder",
+ "ImportFileLabel": "Velg bilder som skal importeres (støtter tidskoder i filnavn)",
+ "ImportFilesInfo": "Bruk tidskodede filnavn:\r\nstart_TT_MM_SS_MMM__slutt_TT_MM_SS_MMM[_indeks].ext\r\n\r\nEksempler:\r\n0_00_01_042__0_00_03_919_0001.png\r\n0_00_01_042__0_00_03_919.png\r\n\r\nRegler:\r\n• TT_MM_SS_MMM for start- og sluttider\r\n• Dobbelt understrek skiller start/slutt\r\n• Valgfri indeks etter sluttid",
+ "FormattingDotDotDot": "Formatering...",
+ "ImagedBasedSubtitleForEditDotDotDot": "Bildebasert undertekst for redigering...",
+ "ImagedBasedSubtitleForOcrDotDotDot": "Bildebasert undertekst for OCR...",
+ "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}",
+ "GapMs": "Mellomrom (ms)",
+ "UseFixedDuration": "Bruk fast varighet",
+ "FixedDurationMs": "Fast varighet (ms)",
+ "AlignViaWhisper": "Juster tidskoder via Whisper..."
+ },
+ "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",
+ "PreviewTitle": "Forhåndsvisning - gjeldende størrelse: {0}x{1}, målstørrelse: {2}x{3}, zoom: {4}%",
+ "TitleExportVobSub": "VobSub (sub/idx)",
+ "CustomTextFormatsDotDotDot": "_Egendefinerte tekstformater...",
+ "PlainTextDotDotDot": "_Klartekst...",
+ "CustomTextFormats": "Egendefinerte tekstformater",
+ "TitleExportCustomFormat": "Eksporter egendefinert tekstformat",
+ "EditCustomFormat": "Rediger egendefinert tekstformat",
+ "NewCustomFormat": "Nytt egendefinert tekstformat",
+ "DeleteSelectedCustomTextFormatX": "Slett valgt egendefinert tekstformat \"{0}\"?",
+ "TimeCodeFormat": "Tidskodeformat",
+ "NewLineFormat": "Linjeskiftformat",
+ "PleaseEnterNameForTheCustomFormat": "Vennligst skriv inn navn på det egendefinerte formatet",
+ "TitleExportPlainText": "Eksporter klartekst",
+ "LineNumbers": "Linjenummer",
+ "ShowLineNumbers": "Vis linjenummer",
+ "AddNewLineAfterLineNumber": "Legg til ny linje etter linjenummer",
+ "AddNewLineAfterTimeCode": "Legg til ny linje etter tidskode",
+ "AddNewLineAfterText": "Legg til ny linje etter tekst",
+ "AddLineBetweenSubtitles": "Legg til linje mellom undertekster",
+ "TitleExportDCinemaInteropPng": "D-Cinema interop/png",
+ "TitleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png",
+ "ImageBasedSubtitleSaved": "Bildebasert undertekst lagret",
+ "TitleExportBdnXml": "Eksporter BDN/xml",
+ "TitleExportWebVttThumbnails": "Eksporter WebVTT (miniatyrbilder)"
+ },
+ "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}",
+ "TotalCharsPerSecond": "Totalt antall tegn/sekund: {0:0.0} sekunder",
+ "TotalWords": "Totalt antall ord i undertekst: {0:#,##0}",
+ "NumberOfItalicTags": "Antall kursiv-koder: {0:#,##0}",
+ "NumberOfBoldTags": "Antall fet skrift-koder: {0:#,##0}",
+ "NumberOfUnderlineTags": "Antall understrekings-koder: {0:#,##0}",
+ "NumberOfFontTags": "Antall skrift-koder: {0:#,##0}",
+ "NumberOfAlignmentTags": "Antall justeringskoder: {0:#,##0}",
+ "LineLengthMinimum": "Undertekstlengde - minimum: {0}",
+ "LineLengthMaximum": "Undertekstlengde - maksimum: {0}",
+ "LineLengthAverage": "Undertekstlengde - gjennomsnitt: {0:#.###}",
+ "LinesPerSubtitleAverage": "Undertekst, antall linjer - gjennomsnitt: {0:0.###}",
+ "SingleLineLengthMinimum": "Enkeltlinjelengde - minimum: {0}",
+ "SingleLineLengthMaximum": "Enkeltlinjelengde - maksimum: {0}",
+ "SingleLineLengthAverage": "Enkeltlinjelengde - gjennomsnitt: {0:#.###}",
+ "SingleLineLengthExceedingMaximum": "Enkeltlinjelengde - overskrider maksimum ({0} tegn): {1} ({2:0.00}%)",
+ "SingleLineWidthMinimum": "Enkeltlinjebredde - minimum: {0} piksler",
+ "SingleLineWidthMaximum": "Enkeltlinjebredde - maksimum: {0} piksler",
+ "SingleLineWidthAverage": "Enkeltlinjebredde - gjennomsnitt: {0:#.###} piksler",
+ "SingleLineWidthExceedingMaximum": "Enkeltlinjebredde - overskrider maksimum ({0} piksler): {1} ({2:0.00}%)",
+ "DurationMinimum": "Varighet - minimum: {0:0.000} sekunder",
+ "DurationMaximum": "Varighet - maksimum: {0:0.000} sekunder",
+ "DurationAverage": "Varighet - gjennomsnitt: {0:0.000} sekunder",
+ "DurationExceedingMinimum": "Varighet - under minimum ({0:0.###} sek): {1} ({2:0.00}%)",
+ "DurationExceedingMaximum": "Varighet - overskrider maksimum ({0:0.###} sek): {1} ({2:0.00}%)",
+ "CharactersPerSecondMinimum": "Tegn/sek - minimum: {0:0.000}",
+ "CharactersPerSecondMaximum": "Tegn/sek - maksimum: {0:0.000}",
+ "CharactersPerSecondAverage": "Tegn/sek - gjennomsnitt: {0:0.000}",
+ "CharactersPerSecondExceedingOptimal": "Tegn/sek - overskrider optimal ({0:0.##} cps): {1} ({2:0.00}%)",
+ "CharactersPerSecondExceedingMaximum": "Tegn/sek - overskrider maksimum ({0:0.##} cps): {1} ({2:0.00}%)",
+ "WordsPerMinuteMinimum": "Ord/min - minimum: {0:0.000}",
+ "WordsPerMinuteMaximum": "Ord/min - maksimum: {0:0.000}",
+ "WordsPerMinuteAverage": "Ord/min - gjennomsnitt: {0:0.000}",
+ "WordsPerMinuteExceedingMaximum": "Ord/min - overskrider maksimum ({0} wpm): {1} ({2:0.00}%)",
+ "GapMinimum": "Mellomrom - minimum: {0:#,##0} ms",
+ "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..."
+ },
+ "ManualChosenEncoding": {
+ "Title": "Importer undertekst med manuelt valgt koding",
+ "SearchEncodings": "Søk etter kodinger",
+ "CodePage": "Kodeside"
+ },
+ "RestoreAutoBackup": {
+ "Title": "Gjenopprett auto-sikkerhetskopi",
+ "OpenAutoBackupFolder": "Åpne mappe for auto-sikkerhetskopi",
+ "RestoreAutoBackupFile": "Gjenopprett auto-sikkerhetskopifil",
+ "DeleteAllSubtitleBackups": "Vil du slette alle sikkerhetskopifiler for undertekster?",
+ "DeleteAll": "Slett alle"
+ },
+ "PropertiesDCinema": {
+ "Title": "D-Cinema SMPTE egenskaper",
+ "GenerateIdAuto": "Generer ny ID ved lagring",
+ "SubtitleId": "Undertekst-ID",
+ "GenerateId": "Generer ID",
+ "MovieTitle": "Filmtittel",
+ "ReelNumber": "Spolenummer",
+ "IssueDate": "Utgivelsesdato",
+ "Now": "Nå",
+ "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",
+ "Export": "Eksporter..."
+ }
+ },
+ "Edit": {
+ "ShowHistory": "Historikk for angre",
+ "RestoreSelected": "Gjenopprett valgte",
+ "ModifySelection": {
+ "Title": "Endre utvalg",
+ "Contains": "Inneholder",
+ "StartsWith": "Starter med",
+ "EndsWith": "Slutter med",
+ "NotContains": "Inneholder ikke",
+ "AllUppercase": "Bare store bokstaver",
+ "Odd": "Oddetall",
+ "Even": "Partall",
+ "DurationLessThan": "Varighet i ms <",
+ "DurationGreaterThan": "Varighet i ms >",
+ "CpsLessThan": "Tegn/sek <",
+ "CpsGreaterThan": "Tegn/sek >",
+ "LengthLessThan": "Lengde <",
+ "LengthGreaterThan": "Lengde >",
+ "PixelLengthGreaterThan": "Piksellengde >",
+ "GapLessThan": "Mellomrom i ms <",
+ "GapGreaterThan": "Mellomrom i ms >",
+ "ExactlyOneLine": "Nøyaktig én linje",
+ "ExactlyTwoLines": "Nøyaktig to linjer",
+ "MoreThanTwoLines": "Mer enn to linjer",
+ "Bookmarked": "Bokmerket",
+ "BookmarkContains": "Bokmerke inneholder",
+ "BlankLines": "Tomme linjer",
+ "SelectionNew": "Nytt utvalg",
+ "SelectionAdd": "Legg til i utvalg",
+ "SelectionSubtract": "Fjern fra utvalg",
+ "SelectionIntersect": "Kryss med utvalg"
+ },
+ "MultipleReplace": {
+ "Title": "Søk og erstatt flere",
+ "EditRule": "Rediger regel",
+ "NewRule": "Ny regel",
+ "EditCategory": "Rediger kategori",
+ "NewCategory": "Ny kategori",
+ "CategoryName": "Kategorinavn",
+ "ExportReplaceRules": "Eksporter regler",
+ "AppliedRules": "Anvendte regler",
+ "FindRule": "Finn regel",
+ "XLinesAffected": "{0:#,##0} linjer påvirket",
+ "DeleteCategoryConfirm": "Slett kategori '{0}'?",
+ "DeleteRuleConfirm": "Slett regel '{0}'?",
+ "FindWhat": "Finn hva",
+ "DescriptionOptional": "Beskrivelse (valgfritt)"
+ },
+ "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..."
+ }
+ },
+ "Tools": {
+ "PickAlignmentTitle": "Velg justering",
+ "PickFontNameTitle": "Velg skriftnavn",
+ "ColorPickerTitle": "Velg farge",
+ "FilterLayersTitle": "Filtrer lag for visning",
+ "FilterLayersHideFromWaveform": "Skjul fra bølgeform/spektrogram",
+ "FilterLayersHideFromSubtitleGrid": "Skjul fra undertekstrutenett",
+ "FilterLayersHideFromVideoPreview": "Skjul fra videoforhåndsvisning",
+ "PickSubtitleFormat": "Velg undertekstformat",
+ "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",
+ "Log": "Logg",
+ "Function": "Funksjon",
+ "RemovedEmptyLine": "Fjern tom linje",
+ "RemovedEmptyLineAtTop": "Fjern tom linje øverst",
+ "RemovedEmptyLineAtBottom": "Fjern tom linje nederst",
+ "RemovedEmptyLineInMiddle": "Fjern tom linje i midten",
+ "RemovedEmptyLinesUnusedLineBreaks": "Fjern tomme linjer / ubrukte linjeskift",
+ "FixOverlappingDisplayTimes": "Fiks overlappende visningstider",
+ "FixShortDisplayTimes": "Fiks korte visningstider",
+ "FixLongDisplayTimes": "Fiks lange visningstider",
+ "FixShortGaps": "Fiks korte mellomrom",
+ "FixInvalidItalicTags": "Fiks ugyldige kursiv-koder",
+ "RemoveUnneededSpaces": "Fjern unødvendige mellomrom",
+ "RemoveUnneededPeriods": "Fjern unødvendige punktum",
+ "FixCommas": "Fiks kommaer",
+ "FixMissingSpaces": "Fiks manglende mellomrom",
+ "BreakLongLines": "Del opp lange linjer",
+ "RemoveLineBreaks": "Fjern linjeskift i korte tekster med kun én setning",
+ "RemoveLineBreaksAll": "Fjern linjeskift i korte tekster (alle unntatt dialoger)",
+ "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 (\")",
+ "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",
+ "NormalizeStrings": "Normaliser strenger",
+ "FixTurkishAnsi": "Fiks tyrkiske ANSI (islandske) bokstaver til Unicode",
+ "FixDanishLetterI": "Fiks dansk bokstav 'i'",
+ "FixSpanishInvertedQuestionAndExclamationMarks": "Fiks spanske omvendte spørsmålstegn og utropstegn",
+ "AddMissingQuote": "Legg til manglende anførselstegn (\")",
+ "AddMissingQuotes": "Legg til manglende anførselstegn (\")",
+ "RemoveHyphensSingleLine": "Fjern dialogstreker i enkeltlinjer",
+ "FixHyphensInDialogs": "Fiks bindestrek i dialoger via stil: {0}",
+ "AddMissingQuotesExample": "\"Hvordan har du det? -> \"Hvordan har du det?\"",
+ "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}",
+ "NothingFixableBut": "Ingenting kunne fikses automatisk. Underteksten inneholder feil - se loggen for detaljer",
+ "XFixedBut": "{0} problem(er) fikset, men underteksten inneholder fortsatt feil - se loggen for detaljer",
+ "XCouldBeFixedBut": "{0} problem(er) kunne fikses, men underteksten vil fortsatt inneholde feil - se loggen for detaljer",
+ "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",
+ "FixShortDisplayTime": "Fiks kort visningstid",
+ "FixOverlappingDisplayTime": "Fiks overlappende visningstid",
+ "FixShortGap": "Fiks kort mellomrom",
+ "FixInvalidItalicTagsExample": "Bryr meg ikke. -> Bryr meg ikke.",
+ "RemoveUnneededSpacesExample": "Hei\u00A0 \u00A0du ; der. -> Hei du; der.",
+ "RemoveUnneededPeriodsExample": "Hei du!. -> Hei du!",
+ "FixMissingSpacesExample": "Hei.Du. -> Hei. Du.",
+ "FixUppercaseIInsideLowercaseWordsExample": "Jorden er fIat. -> Jorden er flat.",
+ "FixLowercaseIToUppercaseIExample": "Hva bryr i meg. -> Hva bryr I meg.",
+ "StartTimeLaterThanEndTime": "Tekstnummer {0}: Starttid er senere enn sluttid: {4}{1} -> {2} {3}",
+ "UnableToFixStartTimeLaterThanEndTime": "Kunne ikke fikse tekstnummer {0}: Starttid er senere enn sluttid: {1}",
+ "XFixedToYZ": "{0} fikset til: {1}{2}",
+ "UnableToFixTextXY": "Kunne ikke fikse tekstnummer {0}: {1}",
+ "UnneededSpace": "Unødvendig mellomrom",
+ "UnneededPeriod": "Unødvendig punktum",
+ "FixMissingSpace": "Fiks manglende mellomrom",
+ "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 '--' -> '...'",
+ "FixDoubleGreaterThan": "Fjern '>>'",
+ "FixEllipsesStart": "Fjern ledende '...'",
+ "FixMissingOpenBracket": "Fiks manglende [ eller ( i linje",
+ "FixMusicNotation": "Erstatt musikksymboler (f.eks. âTª) med foretrukket symbol",
+ "FixDoubleDashExample": "'Whoa-- um yeah!' -> 'Whoa... um yeah!'",
+ "FixDoubleGreaterThanExample": "'>> Robert: Hva skjer!' -> 'Robert: Hva skjer!'",
+ "FixEllipsesStartExample": "'... og så vi' -> 'og så vi'",
+ "FixMissingOpenBracketExample": "'klunker] Se opp!' -> '[klunker] Se opp!'",
+ "FixMusicNotationExample": "'âTª sweet dreams are' -> '♫ sweet dreams are'",
+ "NumberOfImportantLogMessages": "{0} viktige loggmeldinger!",
+ "FixedOkXY": "Fikset og OK - '{0}': {1}",
+ "FixOcrErrorExample": "D0n't -> Don't",
+ "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",
+ "FixCommonOcrErrorsStep1": "Fiks vanlige feil, trinn 1 (velg rettelser)",
+ "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",
+ "ApplySelectedFixes": "Bruk valgte rettelser"
+ },
+ "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)"
+ },
+ "ApplyDurationLimits": {
+ "Title": "Bruk varighetsgrenser",
+ "FixMinDurationMs": "Fiks minimumsvarighet (ms)",
+ "DoNotGoPastShotChange": "Ikke gå forbi sceneskifte",
+ "FixMaxDurationMs": "Fiks maksimumsvarighet (ms)",
+ "MaxDurationShouldBeHigherThanMinDuration": "Maksimumsvarighet bør være høyere enn minimumsvarighet",
+ "ChangedDurationFromXToYCommentZ": "Endret varighet fra {0} til {1} {2}",
+ "OnlyPartialFixed": "(bare delvis fikset)",
+ "UnfixableX": "Ufiksbar: {0}",
+ "FixedX": "Fikset: {0}",
+ "FixedXImprovedY": "Rettelser: {0}, Forbedringer: {1}",
+ "NoChangesNeeded": "Ingen endringer nødvendig"
+ },
+ "ApplyMinGaps": {
+ "Title": "Bruk minimumsmellomrom mellom undertekster",
+ "NumberOfGapsFixedX": "Antall minimumsmellomrom anvendt: {0}",
+ "MinFramesBetweenLines": "Minimum antall bilder mellom linjer",
+ "MinMsBetweenLines": "Minimum millisekunder mellom linjer",
+ "ChangedGapFromXToYCommentZ": "Endret mellomrom fra {0} til {1} {2}"
+ },
+ "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"
+ },
+ "BridgeGaps": {
+ "Title": "Tett hull",
+ "BridgeGapsSmallerThan": "Tett hull mindre enn (ms)",
+ "MinGap": "Minimum mellomrom (ms)",
+ "NumberOfSmallGapsBridgedX": "Antall små hull tettet: {0}",
+ "PercentFoPrevious": "Mellomrom for forrige (%)",
+ "GapChange": "Mellomromsendring"
+ },
+ "Renumber": {
+ "Title": "Gjenummerer",
+ "StartFromNumber": "Start fra nummer:"
+ },
+ "SortBy": {
+ "Title": "Sorter undertekster",
+ "SortOrder": "Sorteringsrekkefølge"
+ },
+ "BatchConvert": {
+ "Title": "Satsvis konvertering",
+ "OneActionsSelected": "Én handling valgt",
+ "XActionsSelected": "{0} handlinger valgt",
+ "OutputFolderSource": " Utdatamappe: Kildemappe",
+ "OutputFolderX": " Utdatamappe: {0}",
+ "EncodingXOverwriteY": "Koding: {0}, overskriv eksisterende filer: {1}",
+ "TargetFormatSettings": "Målformat-innstillinger",
+ "FileNameContainsDotDotDot": "Filnavnet inneholder...",
+ "TrackLanguageContainsDotDotDot": "Sporspråk inneholder...",
+ "BatchConvertSettings": "Innstillinger for satsvis konvertering",
+ "AddFormatting": "Legg til formatering",
+ "AddItalic": "Legg til kursiv",
+ "AddBold": "Legg til fet skrift",
+ "AddUnderline": "Legg til understreking",
+ "AddAlignment": "Legg til justering",
+ "AddColor": "Legg til farge",
+ "DeleteLinesWithSpecificActorsOrStyles": "Slett linjer med skuespillere eller stiler (separer flere med komma)",
+ "UseSourceStylesIfPossible": "Bruk kildestiler hvis mulig",
+ "EditStyles": "Rediger stiler",
+ "EditProperties": "Rediger egenskaper",
+ "EditAttachments": "Rediger vedlegg",
+ "ErrorsExportedX": "Feil eksportert: {0}",
+ "SlowFontSizeChange": "Langsom endring av skriftstørrelse",
+ "IncreaseFontKerning": "Øk fontkjerning",
+ "ScrollUp": "Rull opp",
+ "ScrollDown": "Rull ned",
+ "RotateIn": "Roter inn",
+ "TiltBounce": "Tilt sprett",
+ "FontSizeBounceIn": "Skriftstørrelse spretter inn"
+ },
+ "ChangeCasing": {
+ "Title": "Endre bokstavstørrelse",
+ "FixNames": "Fiks navn",
+ "ExtraNames": "Ekstra navn",
+ "EnterExtraNamesHint": "Skriv inn ekstra navn som skal fikses, separert med komma",
+ "OnlyFixUppercaseLines": "Bare fiks linjer med store bokstaver",
+ "FixNamesOnly": "Bare fiks navn",
+ "AllUppercase": "Bare store bokstaver",
+ "AllLowercase": "Bare små bokstaver"
+ },
+ "ChangeFormatting": {
+ "Title": "Endre formatering"
+ },
+ "ConvertActors": {
+ "Title": "Konverter skuespillere",
+ "ConvertActorFrom": "Konverter skuespiller fra",
+ "ConvertActorTo": "Konverter skuespiller til",
+ "InlineActorViaX": "Inkluder skuespiller via {0}",
+ "SetColor": "Sett farge",
+ "OnlyNames": "Kun navn",
+ "NumberOfConversionsX": "Antall konverteringer: {0}"
+ },
+ "JoinSubtitles": {
+ "Title": "Slå sammen undertekster",
+ "KeepTimeCodes": "Behold tidskoder",
+ "AppendTimeCodes": "Legg til tidskoder",
+ "AddMsAfterEachFile": "Legg til millisekunder etter hver fil",
+ "Join": "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": {
+ "Title": "Del opp / balanser lange linjer",
+ "SplitLongLines": "Del opp lange linjer (til flere linjer)",
+ "RebalanceLongLines": "Balanser lange linjer på nytt",
+ "SplitLongLine": "Del opp lang linje",
+ "RebalanceLongLine": "Balanser lang linje på nytt",
+ "SplitIntoXLines": "Del i {0} linjer: '{1}' → '{2}...'",
+ "LinesSplitX": "Linjer delt: {0}",
+ "LinesSplitXLinesRebalancedY": "Linjer delt: {0}, linjer balansert: {1}"
+ },
+ "MergeShortLines": {
+ "Title": "Slå sammen korte linjer",
+ "HighlightParts": "Fremhev deler (karaoke)",
+ "MergedLineInfo": "Slått sammen linje {0} til {1} - {2}",
+ "LinesMergedX": "Linjer slått sammen: {0}"
+ },
+ "MergeLinesWithSameText": {
+ "Title": "Slå sammen linjer med samme tekst",
+ "MaxMsBetweenLines": "Maks millisekunder mellom linjer",
+ "IncludeIncrementingLines": "Inkluder linjer med økende tekst"
+ },
+ "MergeLinesWithSameTimeCodes": {
+ "Title": "Slå sammen linjer med samme tidskoder",
+ "MaxMsDifference": "Maks forskjell (millisekunder)",
+ "MakeDialog": "Lag dialoger"
+ },
+ "NetflixCheckAndFix": {
+ "Title": "Netflix sjekk og fiks feil",
+ "GenerateReport": "Generer rapport",
+ "NothingToReport": "Ingen problemer funnet.",
+ "SaveNetflixQualityReport": "Lagre Netflix-kvalitetsrapport",
+ "NetflixReportSaved": "Netflix-kvalitetsrapport lagret",
+ "NetFlixQualityReportSavedToX": "Netflix-kvalitetsrapport lagret til:\n {0}",
+ "DialogHyphenSpace": "Mellomrom med bindestrek i dialogboksen",
+ "EllipsesNotThreeDots": "Bruk elipser (ikke tre prikker)",
+ "OnlyAllowedGlyphs": "Kun tillatte glyffer",
+ "Italics": "Kursiv",
+ "MaxCharsSec": "Maks tegn/sek",
+ "MaxDuration": "Maks varighet",
+ "MaxLineLength": "Maks linjelengde",
+ "MinDuration": "Min varighet",
+ "MaxNumberOfLines": "Maks antall linjer",
+ "OneToTenSpellOut": "En til ti staver ut",
+ "ShotChanges": "Skudskifter",
+ "StartNumberSpellOut": "Startnummer staves ut",
+ "TextforHiUseBrackets": "Tekst for HI, bruk parenteser",
+ "FrameRate": "Bildefrekvens",
+ "TwoFrameGrap": "Mellomrom med to frames",
+ "WhiteSpace": "Hvit plass"
+ },
+ "ImageBasedEdit": {
+ "EditImagedBaseSubtitle": "Rediger bildebasert undertekst",
+ "EditImagedBaseSubtitleX": "Rediger bildebasert undertekst: {0}",
+ "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",
+ "ResetToDefaults": "Tilbakestill til standard",
+ "AlphaAdjustmentInfo": "Alfajustering: Legg til/trekk fra i alfakanalen.\nForhåndsvisningen oppdateres automatisk og vises med rutete bakgrunn for å visualisere gjennomsiktighet.",
+ "AdjustBrightness": "Juster lysstyrke",
+ "Brightness": "Lysstyrke",
+ "Contrast": "Kontrast",
+ "Gamma": "Gamma",
+ "BrightnessAdjustmentInfo": "Juster glidebryterne for å endre lysstyrke, kontrast og gamma.\nForhåndsvisningen oppdateres automatisk og viser den første valgte underteksten.",
+ "ResizeImages": "Endre størrelse på bilder",
+ "Percentage": "Prosent",
+ "ResizeImagesInfo": "Skriv inn prosenten for å endre bildestørrelse.\nForhåndsvisningen oppdateres automatisk."
+ },
+ "RemoveTextForHearingImpaired": {
+ "Title": "Fjern tekst for hørselshemmede",
+ "Interjections": "Interjeksjoner",
+ "SkipIfStartWith": "Hopp over hvis starter med",
+ "RemoveTextBetween": "Fjern tekst mellom",
+ "Brackets": "Hakeparenteser",
+ "CurlyBrackets": "Krøllparenteser",
+ "Parentheses": "Parenteser",
+ "And": "og",
+ "OnlySeparateLines": "Bare separate linjer",
+ "RemoveTextBeforeColon": "Fjern tekst før kolon",
+ "OnlyIfTextIsUppercase": "Bare hvis teksten er med store bokstaver",
+ "OnlyOnSeparateLine": "Bare på separat linje",
+ "IfLineIsUppercase": "Hvis linjen er med store bokstaver",
+ "IfLineContains": "Hvis linjen inneholder",
+ "IfLineOnlyContainsMusicSymbols": "Hvis linjen kun inneholder musikksymboler",
+ "RemoveInterjections": "Fjern interjeksjoner"
+ }
+ },
+ "SpellCheck": {
+ "SpellCheck": "Stavekontroll",
+ "GetDictionariesTitle": "Stavekontroll - hent ordbøker",
+ "GetDictionaryInstructions": "Velg språk og klikk last ned",
+ "AddNameToUserDictionary": "Legg til navn i brukerordbok",
+ "AddNameToNamesList": "Legg til navn i navneliste",
+ "NoDictionariesFound": "Ingen ordbøker funnet",
+ "WordNotFound": "Ord ikke funnet",
+ "LineXofY": "Stavekontroll - linje {0} av {1}",
+ "ChangeWordFromXToY": "Endre ord fra '{0}' til '{1}'",
+ "ChangeAllWordsFromXToY": "Endre alle ord fra '{0}' til '{1}'",
+ "IgnoreWordXOnce": "Ignorer ord '{0}' én gang",
+ "IgnoreWordXAlways": "Ignorer ord '{0}' alltid",
+ "WordXAddedToNamesList": "Ord '{0}' lagt til i navneliste",
+ "WordXAddedToUserDictionary": "Ord '{0}' lagt til i brukerordbok",
+ "UseSuggestionX": "Bruk forslag '{0}'",
+ "UseSuggestionXAlways": "Bruk forslag '{0}' alltid",
+ "AddXToUserDictionary": "Legg til '{0}' i brukerordbok",
+ "IgnoreAllX": "Ignorer alle '{0}'",
+ "PickSpellCheckDictionaryDotDotDot": "Velg ordbok for stavekontroll...",
+ "ChooseSpellCheckDictionary": "Velg ordbok for stavekontroll"
+ },
+ "Video": {
+ "GoToVideoPosition": "Gå til videoposisjon",
+ "GenerateBlankVideoDotDotDot": "Generer blank video...",
+ "GenerateBlankVideoTitle": "Generer blank video",
+ "ReEncodeVideoForBetterSubtitlingTitle": "Omkod video for bedre underteksting",
+ "ReEncodeVideoForBetterSubtitlingDotDotDot": "Omkod video for bedre underteksting...",
+ "OpenSecondarySubtitleOnVideoPlayerDotDotDot": "Sekundær undertekst på videospiller, åpne...",
+ "OpenSecondarySubtitleOnVideoPlayer": "Sekundær undertekst (på videospiller)",
+ "RemoveSecondarySubtitleOnVideoPlayer": "Sekundær undertekst på videospiller, fjern",
+ "CutVideoTitle": "Klipp video",
+ "CutVideoDotDotDot": "Klipp video...",
+ "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)",
+ "ImportCurrentSubtitle": "Importer gjeldende undertekst",
+ "AddRemoveEmbeddedSubtitlesTitle": "Legg til/fjern innebygde undertekster",
+ "AddCurrentSubtitle": "Legg til gjeldende undertekst",
+ "TitleOrLanguage": "Tittel/språk",
+ "ViewMatroskaTrackX": "Vis Matroska-spor - {0}",
+ "ResolutionSeparator": "x",
+ "OpenFromUrlTitle": "Åpne videofil fra nettadresse",
+ "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",
+ "PassX": "Pass {0}",
+ "Encoding": "Koding",
+ "BitRate": "Bitrate",
+ "TotalBitRateX": "Total bitrate: {0}",
+ "SampleRate": "Samplingsfrekvens",
+ "Audio": "Lyd",
+ "Stereo": "Stereo",
+ "Preset": "Forhåndsinnstilling",
+ "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."
+ },
+ "VideoTransparent": {
+ "Title": "Generer gjennomsiktig video med undertekster",
+ "InfoAssaOff": "Merk: Advanced SubStation Alpha-stiler støttes.",
+ "InfoAssaOn": "Merk: Advanced SubStation Alpha-stiler vil bli brukt :)"
+ },
+ "AudioToText": {
+ "Title": "Tale til tekst",
+ "Transcribe": "Transkriber",
+ "TranslateToEnglish": "Oversett til engelsk",
+ "Transcribing": "Transkriberer...",
+ "TranscribingXOfY": "Transkriberer {0} av {1}...",
+ "InputLanguage": "Inndataspråk",
+ "AdvancedWhisperSettings": "Avanserte Whisper-innstillinger",
+ "DownloadingWhisperEngine": "Laster ned Whisper-motor",
+ "EnableVad": "Aktiver VAD",
+ "WhisperXxlStandard": "Standard",
+ "WhisperXxlStandardAsia": "Standard Asia",
+ "WhisperXxlSentence": "Setningsnivå",
+ "WhisperXxlSingleWords": "Enkeltord",
+ "WhisperXxlHighlightWord": "Uthev ord",
+ "SelectModel": "Velg modell",
+ "ViewWhisperLogFile": "Vis Whisper-loggfil",
+ "ReDownloadX": "Last ned {0} på nytt",
+ "DownloadingSpeechToTextModel": "Laster ned tale-til-tekst-modell",
+ "WhisperPostProcessingTitle": "Whisper etterbehandling",
+ "AdjustTimings": "Juster tidsberegninger",
+ "MergeShortLines": "Slå sammen korte linjer",
+ "BreakSplitLongLines": "Del opp / splitt lange linjer",
+ "FixShortDuration": "Fiks kort varighet",
+ "FixCasing": "Fiks bokstavstørrelse",
+ "AddPeriods": "Legg til punktum",
+ "ChangeUnderlineToColor": "Endre understreking til farge"
+ },
+ "TextToSpeech": {
+ "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",
+ "VoiceSettings": "TTS - Stemmeinnstillinger",
+ "VoiceSampleText": "Prøvetekst for stemme",
+ "RefreshVoices": "Oppdater stemmer",
+ "VideoEncodingSettings": "TTS - Videokodingsinnstillinger",
+ "ElevenLabsSettings": "TTS - ElevenLabs-innstillinger",
+ "ElevenLabsSettingsResetHint": "Tilbakestill ElevenLabs-innstillinger til standardverdier",
+ "RegenerateAudio": "Regenerer lyd",
+ "AutoContinuePlaying": "Auto-fortsett avspilling",
+ "AddingAudioToVideoFileDotDotDot": "Legger lyd til videofil...",
+ "PreparingMergeDotDotDot": "Forbereder sammenslåing...",
+ "ImportVoiceDotDotDot": "Importer stemme...",
+ "VoiceImportSuccessTitle": "Stemme importert",
+ "VoiceXImported": "Stemme '{0}' ble importert vellykket",
+ "AdvancedTtsSettings": "Avanserte TTS-innstillinger",
+ "ProAudioPostProcessing": "Pro lydetterbehandling",
+ "ProAudioPostProcessingDescription": "Anvender EQ-varme, støyport, kompresjon, loudness-normalisering (-16 LUFS) og inntoning/uttoning på hvert segment.",
+ "AudioDucking": "Lyd-ducking",
+ "AudioDuckingDescription": "Reduserer det originale videolydvolumet og mikser det med TTS-lyden, slik at det originale lydsporet fortsatt høres svakt.",
+ "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.",
+ "MaxSilenceMs": "Maks stillhet (ms)",
+ "HighQualityTimeStretch": "Tidsutvidelse av høy kvalitet (WSOLA/rubberband)",
+ "HighQualityTimeStretchDescription": "Bruker rubberband-algoritmen (WSOLA) i stedet for standard atempo-filter for tonehøydebevarende hastighetsendringer. Gir mer naturlig lydende tale, spesielt ved høyere hastighetsfaktorer. Krever librubberband i FFmpeg-versjonen din — faller automatisk tilbake på atempo hvis ikke tilgjengelig.",
+ "SilencePaddingMs": "Stillhet-utfylling (ms)",
+ "SilencePaddingMsDescription": "Legger til en kort stillhet på slutten av hvert segment. Nyttig for pusterom mellom setninger.",
+ "OutputSampleRate": "Utdata samplingsfrekvens (0 = standard)",
+ "OutputSampleRateDescription": "Resampler alle segmenter til spesifisert samplingsfrekvens (f.eks. 44100, 48000). Sett til 0 for å beholde originalfrekvens.",
+ "EdgeTtsRate": "Edge-TTS-rate",
+ "EdgeTtsRateDescription": "Talehastighet for Edge-TTS, f.eks. \"+50%\", \"-30%\", eller \"+0%\" for standard.",
+ "EdgeTtsPitch": "Edge-TTS-tonehøyde",
+ "EdgeTtsPitchDescription": "Tonehøydejustering for Edge-TTS, f.eks. \"+10Hz\", \"-5Hz\", eller \"+0Hz\" for standard.",
+ "EdgeTtsVolume": "Edge-TTS-volum",
+ "EdgeTtsVolumeDescription": "Volumjustering for Edge-TTS, f.eks. \"+20%\", \"-10%\", eller \"+0%\" for standard.",
+ "DownloadPiperPrompt": "«Tekst til tale» krever Piper.\r\n\r\nLaste ned og bruke Piper?"
+ },
+ "ShotChanges": {
+ "TitleGenerateOrImport": "Generer/importer sceneskifter",
+ "GenerateShotChanges": "Generer sceneskifter",
+ "ImportShotChanges": "Importer sceneskifter",
+ "GenerateShotChangesWithFfmpeg": "Generer sceneskifter med ffmpeg",
+ "ShotChangeTimeCode": "Sceneskiftetidskode",
+ "OpenShotChangesFile": "Åpne sceneskiftefil",
+ "ImportShotChangesFromFile": "Importer sceneskifter fra fil",
+ "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?"
+ }
+ },
+ "Waveform": {
+ "GuessTimeCodes": "Gjett tidskoder",
+ "GuessTimeCodesScanBlockSize": "Skanneblokkstørrelse (ms):",
+ "GuessTimeCodesScanBlockAverageMin": "Skanneblokk gjennomsnitt minimum (% av maks):",
+ "GuessTimeCodesScanBlockAverageMax": "Skanneblokk gjennomsnitt maksimum (% av maks):",
+ "GuessTimeCodesSplitLongSubtitlesAt": "Del lange undertekster ved (ms):",
+ "SpeechToTextSelectedLinesDotDotDot": "Tale til tekst valgte linjer...",
+ "SeekSilence": "Søk stillhet",
+ "MinSilenceDurationSeconds": "Min. varighet på stillhet (sekunder):",
+ "MaxSilenceVolume": "Maks. volum for stillhet (0.0 - 1.0):",
+ "GuessTimeCodesDotDotDot": "Gjett tidskoder...",
+ "SeekSilenceDotDotDot": "Søk stillhet...",
+ "ToggleShotChange": "Veksle sceneskifte",
+ "ResetWaveformZoomAndSpeed": "Tilbakestill bølgeform-zoom og hastighet",
+ "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",
+ "SetVideoPositionAndPause": "Sett videoposisjon og pause",
+ "SetVideopositionAndPauseAndCenter": "Sett videoposisjon, pause, og sentrer",
+ "SetVideoposition": "Sett videoposisjon"
+ },
+ "Sync": {
+ "VisualSync": "Visuell synkronisering",
+ "Sync": "Synkronisering",
+ "StartScene": "Startscene",
+ "EndScene": "Sluttscene",
+ "PlayTwoSecondsAndBack": "Spill 2 sek og tilbake",
+ "FindText": "Finn tekst",
+ "ResolutionXDurationYFrameRateZ": "Oppløsning: {0}, varighet: {1}, bildefrekvens: {2}",
+ "StartSceneMustComeBeforeEndScene": "Startscene må komme før sluttscene",
+ "GoToSubPos": "Gå til sub pos",
+ "SpeedInPercentage": "Hastighet i %",
+ "FromDropFrameValue": "Fra drop-frame-verdi",
+ "ToDropFrameValue": "Til drop-frame-verdi",
+ "AdjustAll": "Juster alle",
+ "AdjustSelectedLines": "Juster valgte linjer",
+ "AdjustSelectedLinesAndForward": "Juster valgte linjer og fremover",
+ "ToFrameRate": "Til bildefrekvens",
+ "FromFrameRate": "Fra bildefrekvens",
+ "AdjustAllTimes": "Juster alle tider (vis tidligere/senere)",
+ "ShowEarlier": "Vis tidligere",
+ "ShowLater": "Vis senere",
+ "ChangeFrameRate": "Endre bildefrekvens",
+ "SetSyncPoint": "Sett synkroniseringspunkt",
+ "SyncPoints": "Synkroniseringspunkter",
+ "PointSync": "Punktsynkronisering",
+ "PointSyncViaOther": "Punktsynkronisering via annen undertekst",
+ "AdjustmentX": "Justering: {0}",
+ "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",
+ "OffsetInSeconds": "Forskyvning i sekunder",
+ "SpeedFactor": "Hastighetsfaktor"
+ },
+ "Translate": {
+ "TranslateViaCopyPaste": "Auto-oversett via kopier/lim inn",
+ "MaxBlockSize": "Maks blokkstørrelse",
+ "LineSeparator": "Linjeskilletegn",
+ "BlockCopyInfo": "Gå til oversetter/AI og lim inn tekst (allerede på utklippstavlen), kopier resultatet tilbake til utklippstavlen og klikk på knappen nedenfor.",
+ "BlockCopyGetFromClipboard": "Hent tekst fra utklippstavlen (fra oversetter/AI)",
+ "ReCopyTextToClipboard": "Kopier tekst tilbake til utklippstavlen (for oversetter/AI)",
+ "BlockXOfY": "Blokk {0} av {1}",
+ "NoTextInClipboard": "Ingen tekst på utklippstavlen",
+ "TextInClipboardIsSameAsSourceText": "Teksten på utklippstavlen er den samme som kildeteksten, prøv igjen.",
+ "LineMerge": "Linjesammenslåing",
+ "DelayInSecondsBetweenRequests": "Forsinkelse i sekunder mellom forespørsler",
+ "MaxBytesPerRequest": "Maks bytes per forespørsel",
+ "PromptText": "Ledetekst (prompt)",
+ "TranslateEachLineSeparately": "Oversett hver linje separat"
+ },
+ "Options": {
+ "Settings": {
+ "DialogStyle": "Dialogstil",
+ "DialogStyleDashSecondLineWithoutSpace": "Bindestrek andre linje uten mellomrom",
+ "DialogStyleDashSecondLineWithSpace": "Bindestrek andre linje med mellomrom",
+ "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)",
+ "ContinuationStyleNoneLeadingTrailingEllipsis": "Ingen, ellipse for pauser",
+ "ContinuationStyleOnlyTrailingDots": "Punktum (bare etterfølgende)",
+ "ContinuationStyleLeadingTrailingDots": "Punktum",
+ "ContinuationStyleOnlyTrailingEllipsis": "Ellipse (bare etterfølgende)",
+ "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",
+ "CpsLineLengthStyleCalcNoSpace": "Tell alle unntatt mellomrom",
+ "CpsLineLengthStyleCalcCjk": "CJK 1, Latinsk 0.5",
+ "CpsLineLengthStyleCalcCjkNoSpace": "CJK 1, Latinsk 0.5, mellomrom 0",
+ "CpsLineLengthStyleCalcIncludeCompositionCharacters": "Inkluder komposisjonstegn",
+ "CpsLineLengthStyleCalcIncludeCompositionCharactersNotSpace": "Inkluder komposisjonstegn, ikke mellomrom",
+ "CpsLineLengthStyleCalcNoSpaceOrPunctuation": "Ingen mellomrom eller tegnsetting ()[]-:;,.!?",
+ "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",
+ "SearchSettingsDotDoDot": "Søk etter innstillinger...",
+ "SyntaxColoring": "Syntaksfarging",
+ "WaveformSpectrogram": "Bølgeform/spektrogram",
+ "Network": "Nettverk",
+ "FileTypeAssociations": "Filtypetilknytninger",
+ "TextBoxColorTags": "Fargekoder (HTML/ASSA) i undertekst-tekstboks",
+ "TextBoxLiveSpellCheck": "Direkte stavekontroll i undertekst-tekstboks",
+ "TextBoxCenterText": "Sentrert tekst i undertekst-tekstboks",
+ "TextBoxFontBold": "Fet tekst i undertekst-tekstboks",
+ "TextBoxFontSize": "Skriftstørrelse i undertekst-tekstboks",
+ "SubtitleTextBoxAndGridFontName": "UI-skrift i undertekst-tekstboks og rutenett",
+ "SubtitleGridFontSize": "Skriftstørrelse i undertekst-rutenett",
+ "SubtitleGridTextSingleLine": "Vis undertekst som én linje i rutenettet",
+ "SubtitleGridLiveSpellCheck": "Direkte stavekontroll i undertekst-rutenett",
+ "SubtitleGridShowFormatting": "Vis formatert (HTML/ASSA) tekst i undertekst-rutenett",
+ "ShowUpDownStartTime": "Vis opp/ned-kontroll for \"Vis\"",
+ "ShowUpDownEndTime": "Vis opp/ned-kontroll for \"Skjul\"",
+ "ShowUpDownDuration": "Vis opp/ned-kontroll for \"Varighet\"",
+ "ShowUpDownLabels": "Vis etiketter for opp/ned-kontroller (Vis/Skjul/Varighet)",
+ "ShowButtonHints": "Vis knappetips",
+ "GridCompactMode": "Bruk kompakt modus for rutenett",
+ "UiFont": "UI-skrift",
+ "Theme": "Tema",
+ "IconTheme": "Ikontema",
+ "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",
+ "SingleLineMaxLength": "Enkeltlinje maks lengde",
+ "OptimalCharsPerSec": "Optimalt tegn/sek",
+ "MaxCharsPerSec": "Maks tegn/sek",
+ "MaxWordsPerMin": "Maks ord/min",
+ "MinDurationMs": "Min. varighet (ms)",
+ "MaxDurationMs": "Maks varighet (ms)",
+ "MinGapMs": "Min. mellomrom (ms)",
+ "MaxLines": "Maks antall linjer",
+ "UnbreakSubtitlesShortThan": "Fjern linjedeling på undertekster kortere enn",
+ "NewEmptyDefaultMs": "Standard varighet for ny undertekst (ms)",
+ "PromptBeforeDelete": "Spør før sletting",
+ "RememberPositionAndSize": "Husk vindusposisjon og -størrelse",
+ "AutoBackupOn": "Auto-sikkerhetskopi",
+ "AutoBackupIntervalMinutes": "Intervall for auto-sikkerhetskopi (minutter)",
+ "AutoBackupDeleteAfterDays": "Behold auto-sikkerhetskopi i (dager)",
+ "AutoConvertToUtf8": "Auto-konverter til UTF-8 ved åpning",
+ "AutoTrimWhiteSpace": "Auto-trim mellomrom",
+ "DefaultEncoding": "Standard koding",
+ "ColorDurationTooShort": "Farg varighet hvis for kort",
+ "ColorDurationTooLong": "Farg varighet hvis for lang",
+ "ColorTextTooLong": "Farg tekst hvis for lang",
+ "ColorTextTooWide": "Farg tekst hvis for bred (piksler)",
+ "ColorTextTooManyLines": "Farg tekst hvis mer enn 2 linjer",
+ "ColorOverlap": "Farg tidskodeoverlapp",
+ "ColorGapTooShort": "Farg hvis mellomrommet er for kort",
+ "ErrorBackgroundColor": "Feil bakgrunnsfarge",
+ "WaveformDrawGridLines": "Tegn rutenettlinjer",
+ "WaveformCenterVideoPosition": "Sentrer videoposisjon",
+ "WaveformShowToolbar": "Vis verktøylinje",
+ "WaveformShowToolbarEdit": "Rediger verktøylinje...",
+ "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",
+ "WaveformSnapToShotChanges": "Fest til sceneskifter",
+ "WaveformShotChangesAutoGenerate": "Sceneskifter autogenerer",
+ "WaveformTextFontSize": "Bølgeform tekst skriftstørrelse",
+ "WaveformTextFontBold": "Bølgeform tekst fet skrift",
+ "WaveformTextColor": "Bølgeform tekstfarge",
+ "WaveformColor": "Bølgeformfarge",
+ "WaveformBackgroundColor": "Bølgeform bakgrunnsfarge",
+ "WaveformSelectedColor": "Bølgeform valgt farge",
+ "DownloadFfmpeg": "Last ned ffmpeg",
+ "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",
+ "ShowToolbarSettings": "Vis innstillinger-ikon",
+ "ShowToolbarLayout": "Vis oppsett-ikon",
+ "ShowToolbarHelp": "Vis hjelp-ikon",
+ "ShowToolbarEncoding": "Vis koding",
+ "ShowToolbarFrameRate": "Vis bildefrekvens",
+ "ProxyAddress": "Proxy-adresse",
+ "Username": "Brukernavn",
+ "Password": "Passord",
+ "DefaultFormat": "Standard format",
+ "DefaultSaveAsFormat": "Standard \"Lagre som\"-format",
+ "FavoriteSubtitleFormats": "Favoritt undertekstformater",
+ "ShowStopButton": "Vis stopp-knapp",
+ "ShowFullscreenButton": "Vis fullskjermsknapp",
+ "AutoOpenVideoFile": "Åpne videofil automatisk når undertekst åpnes",
+ "DownloadMpv": "Last ned mpv",
+ "DownloadVlc": "Last ned VLC",
+ "GoToLineNumberSetsVideoPosition": "Gå-til-linjenummer setter også videoposisjon",
+ "AdjustAllTimesRememberLineSelectionChoice": "Juster alle tider, husk valg av linjeutvalg",
+ "FilesAndLogs": "Filer og logger",
+ "ShowErrorLogFile": "Vis feilloggfil",
+ "ShowWhisperLogFile": "Vis Whisper-loggfil",
+ "ShowSettingsFile": "Vis innstillingsfil",
+ "ShowAssaLayer": "Vis ASSA lag-boks",
+ "WaveformCursorColor": "Bølgeform markør/hodefarge",
+ "WaveformParagraphLeftColor": "Bølgeform venstre kantfarge",
+ "WaveformParagraphRightColor": "Bølgeform høyre kantfarge",
+ "WaveformFancyHighColor": "Bølgeform fancy høy farge",
+ "WaveformFocusOnMouseOver": "Fokus ved mus over",
+ "ResetAllSettings": "Tilbakestill alle innstillinger",
+ "ResetShortcuts": "Tilbakestill hurtigtaster",
+ "ResetRecentFiles": "Tilbakestill nylige filer",
+ "ResetMultipleReplaceRules": "Tilbakestill regler for søk og erstatt flere",
+ "ResetAppearance": "Tilbakestill utseende",
+ "ResetAutoTranslate": "Tilbakestill auto-oversett",
+ "ResetWindowPositionAndSize": "Tilbakestill vindusposisjon og -størrelse",
+ "ResetSettingsTitle": "Tilbakestill innstillinger",
+ "OpenRuleFile": "Åpne regelfil",
+ "ExportProfiles": "Eksporter profiler",
+ "SaveRuleProfilesFile": "Lagre profilregelfil",
+ "RuleProfilesExportedX": "{0} regelprofiler eksportert",
+ "RuleProfilesImportedX": "{0} regelprofiler importert",
+ "UseSpecialStyleAfterLongGaps": "Bruk spesialstil etter lange mellomrom",
+ "AddSpace": "Legg til mellomrom",
+ "ProcessIfEndsWithComma": "Behandle hvis slutter med komma",
+ "RemoveComma": "Fjern komma",
+ "EditContinuationStyleCustom": "Rediger egendefinert fortsettelsesstil",
+ "LongGapThreshold": "Terskel for lang mellomrom (ms)",
+ "AfterLongGap": "Etter langt mellomrom:",
+ "ResetSyntaxColoring": "Tilbakestill syntaksfarging",
+ "ResetWaveform": "Tilbakestill bølgeform",
+ "ResetRules": "Tilbakestill regler",
+ "UseFrameMode": "Bruk bildemodus (tt.mm.ss.bb)",
+ "TextBoxLimitNewLines": "Begrens antall linjer i undertekst-tekstboks",
+ "MpvVideoOutput": "Videoutgang (mpv)",
+ "MpvOpenGl": "libmpv - OpenGL",
+ "MpvSoftwareRendering": "libmpv - Programvare-rendering (treg)",
+ "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",
+ "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",
+ "VlcWidRendering": "libVLC - Native Window ID-rendering",
+ "SubtitleSEnterKeyAction": "Undertekstrutenett Enter-tast handling",
+ "SubtitleSingleClickAction": "Undertekstrutenett enkeltklikk-handling",
+ "SubtitleDoubleClickAction": "Undertekstrutenett dobbeltklikk-handling",
+ "SaveAsBehavior": "\"Lagre som\"-atferd",
+ "SaveAsAppendLanguageCode": "\"Lagre som\" legg til språkkode",
+ "GridGoToSubtitleAndSetVideoPosition": "Gå til undertekst og sett videoposisjon",
+ "GridGoToNextLine": "Gå til neste linje",
+ "GridGoToSubtitleOnlyWaveformOnly": "Gå til undertekst bare (kun bølgeform)",
+ "GridGoToSubtitleAndPause": "Gå til undertekst og sett på pause",
+ "GridGoToSubtitleAndPlay": "Gå til undertekst og spill av",
+ "GridGoToSubtitleAndPauseAndFocusTextBox": "Gå til undertekst og pause og fokus tekstboks",
+ "SubtitleGridFormattingNone": "Ingen formatering",
+ "SubtitleGridFormattingShowFormatting": "Vis formatering",
+ "SubtitleGridFormattingShowTags": "Vis koder",
+ "WaveformParagraphBackgroundColor": "Bølgeform undertekst bakgrunnsfarge",
+ "WaveformParagraphSelectedBackgroundColor": "Bølgeform valgt undertekst bakgrunnsfarge",
+ "WaveformAllowOverlap": "Tillat overlapp (ved flytting/størrelsesendring)",
+ "SaveAsBehaviorUseSubtitleVideoFilename": "Bruk undertekst/videofilnavn",
+ "SaveAsBehaviorUseVideoSubtitleFilename": "Bruk video/undertekstfilnavn",
+ "SaveAsBehaviorUseVideoFileName": "Bruk videofilnavn",
+ "SaveAsBehaviorUseSubtitleFileName": "Bruk undertekstfilnavn",
+ "SaveAsAppendLanguageCodeTwoLetter": "To bokstaver",
+ "SaveAsAppendLanguageCodeThreeLetter": "Tre bokstaver",
+ "SaveAsAppendLanguageCodeLanguageName": "Språknavn",
+ "SplitOddLineActionWeightTop": "Vekt topp",
+ "SplitOddLineActionWeightBottom": "Vekt bunn",
+ "SplitOddLinesAction": "Del opp oddetall-linjer handling",
+ "OcrUseWordSplitList": "OCR: bruk ord-oppdelingsliste",
+ "SpeechToTextSelectedLinesPromptFistTimeOnly": "Tale til tekst: valgte linjer, spør om språk/motor kun første gang",
+ "MultipleReplaceShowDotDotDotButtons": "Søk og erstatt flere: vis kontekstmenyknapper",
+ "GridFocusTextboxAfterInsertNew": "Rutenett: fokus tekstboks etter innsetting av ny undertekst",
+ "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",
+ "TextBoxButtonShowAutoBreak": "Tekstboks: vis knapp for automatisk linjedeling",
+ "TextBoxButtonShowUnbreak": "Tekstboks: vis knapp for fjern linjedeling",
+ "TextBoxButtonShowItalic": "Tekstboks: vis kursiv-knapp",
+ "TextBoxButtonShowColor": "Tekstboks: vis farge-knapp",
+ "TextBoxButtonShowRemoveFormatting": "Tekstboks: vis knapp for fjern formatering",
+ "WaveformSingleClickAction": "Bølgeform enkeltklikk-handling",
+ "WaveformDoubleClickAction": "Bølgeform dobbeltklikk-handling (etter enkeltklikk-handling)",
+ "AllSettings": "Alle innstillinger",
+ "UiScale": "UI-skalering (%)",
+ "WaveformToolbarItems": "Bølgeform verktøylinjeelementer",
+ "MatchIconColorToDarkTheme": "Samsvar ikonfarge med mørkt tema forgrunnsfarge",
+ "SubtitlePreviewProperties": "Egenskaper for forhåndsvisning av undertekst",
+ "PixelWidthInfo": "Grønne linjer = maks-breddegrense | \r\nRødt område = tekst overskrider grensen"
+ },
+ "Shortcuts": {
+ "Title": "Hurtigtaster",
+ "SearchShortcuts": "Søk etter hurtigtaster...",
+ "Filter": "Filter",
+ "CategoryGeneral": "Generelt",
+ "CategorySubtitleGridAndTextBox": "Undertekstrutenett og tekstboks",
+ "CategorySubtitleGrid": "Undertekstrutenett",
+ "CategoryWaveform": "Bølgeform",
+ "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",
+ "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",
+ "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",
+ "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",
+ "EditModifySelection": "Endre utvalg",
+ "ListSelectAll": "Velg alle",
+ "ListSelectFirst": "Velg første",
+ "ListSelectLast": "Velg siste",
+ "ListInverseSelection": "Inverter utvalg",
+ "ListDeleteSelection": "Slett utvalg",
+ "RippleDeleteSelection": "Krusning-slett utvalg",
+ "Settings": "Innstillinger",
+ "Assigned": "Tilordnet",
+ "Unassigned": "Ikke tilordnet",
+ "PressedKeyX": "Trykket tast: {0}",
+ "PressAKey": "Trykk en tast",
+ "DetectKey": "Gjenkjenn tast",
+ "Control": "Control",
+ "Alt": "Alt",
+ "Win": "Win",
+ "Shift": "Shift",
+ "ControlMac": "⌃",
+ "AltMac": "⌥",
+ "WinMac": "⌘",
+ "ShiftMac": "⇧",
+ "ResetShortcuts": "Tilbakestill hurtigtaster",
+ "ResetShortcutsDetail": "Vil du tilbakestille alle hurtigtaster til standardverdier?",
+ "TogglePlayPause": "Veksle spill/pause",
+ "ToggleLockTimeCodes": "Veksle lås tidskoder",
+ "DuplicateSelectedLines": "Dupliser valgte linjer",
+ "SourceView": "Kildevisning",
+ "ShowAlignmentPicker": "Justering",
+ "AddOrEditBookmark": "Legg til eller rediger bokmerke",
+ "ListBookmarks": "Vis bokmerker",
+ "ToggleBookmark": "Veksle bokmerke (valgte linjer, ingen tekst)",
+ "GoToNextBookmark": "Gå til neste bokmerke",
+ "ToggleWaveformToolbar": "Veksle verktøylinje for bølgeform",
+ "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)",
+ "ToggleFocusGridAndWaveform": "Veksle fokus mellom undertekstrutenett og bølgeform/spektrogram",
+ "ToggleFocusTextBoxAndWaveform": "Veksle fokus mellom tekstboks og bølgeform/spektrogram",
+ "ToggleFocusTextBoxAndGrid": "Veksle fokus mellom tekstboks og undertekstrutenett",
+ "GoToPreviousLineAndSetVideoPosition": "Gå til forrige undertekst og sett videoposisjon",
+ "GoToPreviousLineFromVideoPosition": "Gå til forrige undertekst (fra gjeldende videoposisjon)",
+ "GoToNextLineFromVideoPosition": "Gå til neste undertekst (fra gjeldende videoposisjon)",
+ "GoToNextLineAndSetVideoPosition": "Gå til neste undertekst og sett videoposisjon",
+ "TextBoxDeleteSelectionNoClipboard": "Tekstboks: Slett utvalg (ingen utklippstavle)",
+ "TextBoxCut": "Tekstboks: Klipp ut",
+ "TextBoxCut2": "Tekstboks: Klipp ut (alternativ)",
+ "TextBoxPaste": "Tekstboks: Lim inn",
+ "TextBoxCopy": "Tekstboks: Kopier",
+ "TextBoxSelectAll": "Tekstboks: Velg alle",
+ "SubtitleGridCut": "Undertekstrutenett: Klipp ut",
+ "SubtitleGridCopy": "Undertekstrutenett: Kopier",
+ "SubtitleGridPaste": "Undertekstrutenett: Lim inn",
+ "SetShortcutForX": "Angi hurtigtast for \"{0}\"",
+ "CommandFileNewKeepVideo": "Ny (behold video)",
+ "FileOpenOriginal": "Åpne original",
+ "FileCloseOriginal": "Lukk original",
+ "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",
+ "RemoveTextForHearingImpaired": "Fjern tekst for hørselshemmede",
+ "JoinSubtitles": "Slå sammen undertekster",
+ "SplitSubtitle": "Del opp undertekst",
+ "SpellCheck": "Stavekontroll",
+ "SpellCheckGetDictionary": "Hent ordbok for stavekontroll",
+ "OpenVideo": "Åpne video",
+ "OpenVideoFromUrl": "Åpne video fra nettadresse",
+ "CloseVideo": "Lukk video",
+ "SpeechToText": "Tale til tekst (Whisper)",
+ "TextToSpeech": "Tekst til tale",
+ "BurnIn": "Generer video med innbrente undertekster",
+ "GenerateTransparent": "Generer gjennomsiktig video med undertekster",
+ "UndockVideoControls": "Koble fra videokontroller",
+ "RedockVideoControls": "Fest videokontroller på nytt",
+ "GenerateBlankVideo": "Generer blank video",
+ "ReencodeVideo": "Omkod video",
+ "CutVideo": "Klipp video",
+ "CutVideoSelectedLines": "Klipp video (valgte linjer)",
+ "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",
+ "VideoFullScreen": "Video fullskjerm",
+ "CopyTextFromOriginalSelectedLines": "Kopier tekst fra original (valgte linjer)",
+ "TextBoxRemoveAllFormatting": "Tekstboks, fjern all formatering",
+ "TextBoxItalic": "Tekstboks kursiv",
+ "ResetWaveformZoomAndSpeed": "Tilbakestill bølgeform zoom og avspillingshastighet",
+ "TogglePlaybackSpeed": "Veksle avspillingshastighet",
+ "PlaybackSpeedSlower": "Avspillingshastighet saktere",
+ "PlaybackSpeedFaster": "Avspillingshastighet raskere",
+ "SwitchOriginalAndTranslationSelectedLines": "Bytt original og oversettelse (valgte linjer)",
+ "MergeOriginalIntoTranslationSelectedLines": "Slå sammen original og oversettelse (valgte linjer)",
+ "SeekSilence": "Søk stillhet",
+ "SetVideoPositionCurrentSubtitleStart": "Sett videoposisjon til gjeldende linjestart",
+ "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",
+ "RepeatPreviousLine": "Gjenta forrige linje",
+ "RepeatNextLine": "Gjenta neste linje",
+ "MoveVideoPositionMilliseconds": "Flytt videoposisjon i millisekunder",
+ "ImportShortcutsTitle": "Importer hurtigtaster",
+ "ExportShortcutsTitle": "Eksporter hurtigtaster",
+ "XShortcutsImportedFromY": "{0} hurtigtaster importert fra {1}",
+ "XShortcutsExportedToY": "{0} hurtigtaster eksportert til {1}",
+ "ImportImageSubtitleForEdit": "Importer bildebasert undertekst for redigering",
+ "ShowPointSyncViaOther": "Vis punktsynkronisering via annen undertekst",
+ "ShowPointSync": "Vis punktsynkronisering",
+ "ShowMediaInformation": "Vis medieinformasjon",
+ "ChooseSubtitleFormat": "Velg undertekstformat",
+ "TrimWhitespaceSelectedLines": "Trim mellomrom (valgte linjer)",
+ "WaveformHorizontalZoomInCommand": "Bølgeform horisontal zoom inn",
+ "WaveformHorizontalZoomOutCommand": "Bølgeform horisontal zoom ut",
+ "WaveformVerticalZoomInCommand": "Bølgeform vertikal zoom inn",
+ "WaveformVerticalZoomOutCommand": "Bølgeform vertikal zoom ut",
+ "CopySubtitlePathToClipboard": "Kopier undertekststi til utklippstavle",
+ "CopySubtitleOriginalPathToClipboard": "Kopier undertekststi for original til utklippstavle",
+ "FocusTextBox": "Fokus tekstboks",
+ "SortByStartTime": "Sorter etter \"Vis\"-tid",
+ "SortByEndTime": "Sorter etter \"Skjul\"-tid",
+ "DuplicatesFound": "Følgende dupliserte hurtigtaster ble funnet:",
+ "CopyTextToClipboard": "Kopier tekst til utklippstavle (valgte linjer)",
+ "CopyTextFromOriginalToClipboard": "Kopier tekst fra original til utklippstavle (valgte linjer)",
+ "AssaDraw": "ASSA Tegn",
+ "AssaGenerateProgressBar": "ASSA Generer fremdriftslinje",
+ "AssaGenerateBackgroundBox": "ASSA Generer bakgrunnsboks",
+ "AssaStyles": "ASSA Stiler",
+ "AssaProperties": "ASSA Egenskaper",
+ "AssaAttachments": "ASSA Vedlegg",
+ "AssaVideoColorPicker": "ASSA Videofargevelger",
+ "RecalculateDurationSelectedLines": "Beregn varighet på nytt (valgte linjer)",
+ "ToggleWaveformAndSpectrogramHeight": "Veksle delt høyde for bølgeform/spektrogram",
+ "ToggleSpectrogramStyle": "Veksle spektrogramstil",
+ "CopyMsRelativeToCurrentSubtitleLineToClipboard": "Kopier millisekunder relativt til gjeldende undertekstlinje til utklippstavle",
+ "LayoutZoomIn": "Oppsett zoom inn (skaler grensesnitt)",
+ "LayoutZoomOut": "Oppsett zoom ut (skaler grensesnitt)"
+ },
+ "WordLists": {
+ "Title": "Ordlister",
+ "AddName": "Legg til navn",
+ "AddWord": "Legg til ord",
+ "AddPair": "Legg til par",
+ "NameAndIgnoreList": "Navn/ignoreringsliste",
+ "UserWords": "Brukerordliste",
+ "OcrFixList": "OCR fikseliste",
+ "UnableToAddItem": "Kunne ikke legge til element, det finnes sannsynligvis allerede!",
+ "UnableToRemoveItem": "Kunne ikke fjerne element!"
+ },
+ "ChooseLanguage": {
+ "Title": "Velg språk for brukergrensesnitt"
+ }
+ },
+ "Help": {
+ "AboutSubtitleEdit": "Om Subtitle Edit",
+ "CheckForUpdates": "Se etter oppdateringer",
+ "CheckForUpdatesChecking": "Ser etter oppdateringer...",
+ "CheckForUpdatesUpToDate": "Du kjører den nyeste versjonen.",
+ "CheckForUpdatesNewVersionAvailable": "Ny versjon tilgjengelig: {0}",
+ "CheckForUpdatesUnableToCheck": "Kunne ikke se etter oppdateringer.",
+ "CheckForUpdatesDownloadNewVersion": "Last ned ny versjon"
+ },
+ "Ocr": {
+ "LinesToDraw": "Linjer å tegne",
+ "CurrentImage": "Gjeldende bilde",
+ "AutoDrawAgain": "Autotegn igjen",
+ "StartOcr": "Start OCR",
+ "PauseOcr": "Pause OCR",
+ "InspectLine": "Inspiser linje...",
+ "OcrEngine": "OCR-motor",
+ "Database": "Database",
+ "MaxWrongPixels": "Maks feil piksler",
+ "MaxErrorPct": "Maks feil %",
+ "NumberOfPixelsIsSpace": "Antall piksler som er mellomrom",
+ "InspectImageMatches": "Inspiser bildetreff",
+ "ResolutionXYAndTopmarginZ": "Oppløsning {0}x{1}, toppmarg {2}",
+ "RunningOcrDotDotDotXY": "Kjører OCR... {0}/{1}",
+ "RunningOcrDotDotDot": "Kjører OCR...",
+ "AutoSubmitFirstCharacter": "Auto-send inn første tegn",
+ "EditNOcrDatabase": "Rediger nOCR-database",
+ "ZoomFactorX": "Zoom-faktor: {0}x",
+ "ExpandInfoX": "Utvid antall: {0}",
+ "EditNOcrDatabaseXWithYItems": "Rediger nOCR-database {0} med {1:#,###,##0} elementer",
+ "NewNOcrDatabase": "Ny nOCR-database",
+ "RenameNOcrDatabase": "Gi nOCR-database nytt navn",
+ "NOcrDatabase": "nOCR-database",
+ "DrawMode": "Tegnemodus:",
+ "AddNewCharcter": "Legg til nytt tegn",
+ "LineIndexX": "Linje {0}",
+ "InspectNOcrAdditions": "Inspiser nye nOCR-tillegg",
+ "OcrSelectedLines": "OCR valgte linjer",
+ "ShowImage": "Vis bilde",
+ "FixOcrErrors": "Fiks OCR-feil",
+ "PromptForUknownWords": "Spør om ukjente ord",
+ "TryToGuessUnknownWords": "Prøv å gjette ukjente ord",
+ "AutoBreakIfMoreThanXLines": "Auto-bryt hvis mer enn {0} linjer",
+ "UnknownWords": "Ukjente ord",
+ "AllFixes": "Alle rettelser",
+ "GuessesUsed": "Gjetninger brukt",
+ "Ocr": "OCR",
+ "OcrX": "OCR - {0}",
+ "AddBetterMatch": "Legg til bedre treff",
+ "NOcrInspectImageMatches": "nOCR - Inspiser bildetreff",
+ "AddToOcrPair": "Legg til i OCR-erstatt-par",
+ "AddNameToOcrReplaceList": "Legg til navn i OCR-erstatt-liste",
+ "WordToAdd": "Ord å legge til",
+ "NameToAdd": "Navn å legge til",
+ "ChangeWordFromTo": "Endre ord fra/til",
+ "ClearBackground": "Fjern bakgrunn",
+ "ClearForeground": "Fjern forgrunn",
+ "NOcrDrawHelp": "Tips for tegning\r\n────────────────────\r\n• Hold Ctrl nede for å fortsette linjen\r\n• Ctrl+z=angre, Ctrl+y=gjør om",
+ "EditWholeText": "Rediger hele teksten",
+ "EditWordOnly": "Rediger bare ordet",
+ "ImagePreProcessing": "Bilde-forhåndsbehandling",
+ "PreProcessingTitle": "Forhåndsbehandling",
+ "CropTransparent": "Beskjær gjennomsiktige farger",
+ "InverseColors": "Inverter farger",
+ "RemoveBorders": "Fjern grenser",
+ "Binarize": "Binariser",
+ "BorderSize": "Grensestørrelse",
+ "CaptureTopAlign": "Fangst toppjustering",
+ "OcrImage": "OCR bilde",
+ "OneColor": "Én farge (hvit)",
+ "DarknessThreshold": "Mørkhetsterskel",
+ "EditExportDotDotDot": "Rediger/eksporter...",
+ "EditBinaryOcrDatabase": "Rediger \"Binær bildesammenligning\"-database",
+ "BinaryImageCompareDatabase": "\"Binær bildesammenligning\"-database",
+ "RemoveXFromUnknownWordsList": "Fjern \"{0}\" fra liste over ukjente ord",
+ "DownloadingPaddleOcrEngineDotDotDot": "Laster ned Paddle OCR-motor...",
+ "DownloadingPaddleOcrModelsDotDotDot": "Laster ned Paddle OCR-modeller...",
+ "PaddleOcr": "Paddle OCR",
+ "BinaryImageCompareInspectImageMatches": "\"Binær bildesammenligning\" - Inspiser bildetreff"
+ },
+ "Assa": {
+ "AssaDraw": "ASSA Tegn",
+ "DrawSelectTool": "Velg (flytt punkter)",
+ "DrawLineTool": "Linjeverktøy (F4)",
+ "DrawBezierTool": "Bezier-kurve (F5)",
+ "DrawRectangleTool": "Rektangel (F6)",
+ "DrawCircleTool": "Sirkel (F7)",
+ "DrawCloseShape": "Lukk form (F8/Enter)",
+ "DrawDeleteShape": "Slett form (Del)",
+ "DrawChangeLayer": "Endre lag",
+ "DrawClearAll": "Tøm alt (Ctrl+N)",
+ "DrawZoomIn": "Zoom inn (Ctrl++)",
+ "DrawZoomOut": "Zoom ut (Ctrl+-)",
+ "DrawResetView": "Tilbakestill visning (Ctrl+0)",
+ "DrawToggleGrid": "Veksle rutenett (Ctrl+G)",
+ "DrawCopyToClipboard": "Kopier til utklippstavle (Ctrl+C)",
+ "DrawShapes": "Former",
+ "DrawSelectedPoint": "Valgt punkt",
+ "DrawSelectedShape": "Valgt form",
+ "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",
+ "ProgressBarTitle": "ASSA fremdriftslinje",
+ "ProgressBarSettings": "Fremdriftslinje",
+ "ProgressBarPosition": "Posisjon",
+ "ProgressBarBottom": "Bunn",
+ "ProgressBarTop": "Topp",
+ "ProgressBarForeColor": "Forgrunnsfarge",
+ "ProgressBarBackColor": "Bakgrunnsfarge",
+ "ProgressBarStyle": "Stil",
+ "ProgressBarSquareCorners": "Firkantede hjørner",
+ "ProgressBarRoundedCorners": "Avrundede hjørner",
+ "ProgressBarChapters": "Kapitler",
+ "ProgressBarSplitterWidth": "Deler-bredde",
+ "ProgressBarSplitterHeight": "Deler-høyde",
+ "ProgressBarXAdjustment": "X-justering",
+ "ProgressBarYAdjustment": "Y-justering",
+ "ProgressBarTextAlignment": "Tekstjustering",
+ "ProgressBarTakePosFromVideo": "Hent posisjon fra video",
+ "ProgressBarPreview": "Forhåndsvisning",
+ "ResolutionResamplerTitle": "Endre oppløsning",
+ "ResolutionResamplerSourceRes": "Kildeoppløsning",
+ "ResolutionResamplerTargetRes": "Måloppløsning",
+ "ResolutionResamplerChangeMargins": "Endre marger",
+ "ResolutionResamplerChangeFontSize": "Endre skriftstørrelse",
+ "ResolutionResamplerChangePositions": "Endre posisjoner",
+ "ResolutionResamplerChangeDrawing": "Endre tegning",
+ "ResolutionResamplerFromVideo": "Fra video...",
+ "ResolutionResamplerSourceAndTargetEqual": "Kilde- og måloppløsning er lik - ingenting å gjøre.",
+ "ResolutionResamplerNothingSelected": "Vennligst velg minst ett alternativ å endre.",
+ "BackgroundBoxGenerator": "Generer bakgrunnsboks",
+ "BackgroundBoxPadding": "Utfylling",
+ "BackgroundBoxFillWidth": "Fyll bredde",
+ "BackgroundBoxBoxColor": "Boksfarge",
+ "BackgroundBoxRadius": "Radius",
+ "BackgroundBoxCircle": "Sirkel",
+ "BackgroundBoxSpikes": "Pigger",
+ "BackgroundBoxBubbles": "Bobler",
+ "BackgroundBoxWave": "Bølge",
+ "BackgroundBoxHexagon": "Sekskant",
+ "BackgroundBoxTornPaper": "Revet papir",
+ "BackgroundBoxCloud": "Sky",
+ "BackgroundBoxTornPaperDouble": "Revet papir (topp & bunn)",
+ "BackgroundBoxStarburst": "Stjerneburst",
+ "BackgroundBoxScroll": "Skriftrull / Pergament",
+ "StylesTitle": "Advanced Sub Station Alpha-stiler",
+ "StylesInFile": "Stiler i fil",
+ "StylesSaved": "Stiler lagret",
+ "StylesTitleX": "Stiler - {0}",
+ "PropertiesTitleX": "Egenskaper - {0}",
+ "AttachmentsTitleX": "Vedlegg - {0}",
+ "SmartWrappingTopWide": "0: Smart innpakking (topp vid)",
+ "EndOfLineWrapping": "1: Slutt-på-linje orddeling, bare \\N bryter",
+ "NoWrapping": "2: Ingen innpakking, både \\N og \\n bryter",
+ "SmartWrappingBottomWide": "3: Smart innpakking (bunn vid)",
+ "FontsAndGraphics": "Skrifter og grafikk",
+ "WrapStyle": "Innpakkingsstil",
+ "BorderAndShadowScaling": "Kant- og skyggeskalering",
+ "OriginalScript": "Originalskript",
+ "Graphics": "Grafikk",
+ "CopyToStorageStyles": "Kopier til lagringsstiler",
+ "CopyToFileStyles": "Kopier til filstiler",
+ "SetStyleAsDefault": "Sett stil som standard",
+ "TakeUsagesFromDotDotDot": "Hent bruk fra...",
+ "NoAttachmentsFound": "Ingen vedlegg funnet i den valgte ASSA-filen.",
+ "DeleteStyleQuestion": "Slett stil?",
+ "DeleteStylesQuestion": "Slett stiler?",
+ "OpenStyleImportFile": "Åpne undertekstfil å importere stiler fra",
+ "Primary": "Primær",
+ "Secondary": "Sekundær",
+ "ApplyOverrideTags": "Bruk overstyringskoder",
+ "ChooseOverrideTagToAdd": "Velg overstyringskode å legge til",
+ "FontSizeChange": "Skriftstørrelsesendring",
+ "MoveTextFromLeftToRight": "Flytt tekst fra venstre til høyre",
+ "ColorFromWhiteToRed": "Farge fra hvit til rød",
+ "RotateXSlow": "Roter X (sakte)",
+ "RotateX": "Roter X",
+ "RotateY": "Roter Y",
+ "RotateTilt": "Roter tilt",
+ "SpaceIncrease": "Mellomromsøkning",
+ "PopIn": "Pop inn",
+ "SpinIn": "Spinn inn",
+ "PlayCurrent": "Spill gjeldende",
+ "SetPosition": "Angi posisjon",
+ "ImageColorPicker": "Bilde fargevelger",
+ "CopyColorAsHextoClipboard": "Kopier farge som hex til utklippstavle",
+ "GeneratingBackgroundBoxXOfY": "Genererer bakgrunnsboks {0} av {1}...",
+ "ApplyAdvancedEffectTitle": "Bruk avansert effekt",
+ "ChooseEffect": "Velg effekt",
+ "AdvancedEffectTypewriter": "Skrivemaskin",
+ "AdvancedEffectTypewriterDescription": "Avslører tekst ett tegn om gangen over undertekstens varighet",
+ "AdvancedEffectTypewriterWithHighlight": "Skrivemaskin med utheving",
+ "AdvancedEffectTypewriterWithHighlightDescription": "Avslører tekst ett tegn om gangen med en glødende utheving på det gjeldende tegnet",
+ "AdvancedEffectWordByWord": "Ord for ord",
+ "AdvancedEffectWordByWordDescription": "Avslører tekst ett ord om gangen over undertekstens varighet",
+ "AdvancedEffectKaraoke": "Karaoke",
+ "AdvancedEffectKaraokeDescription": "Uthever hvert tegn i sekvens, og avslører teksten fra venstre til høyre som karaoke-tekster",
+ "AdvancedEffectFancyKaraoke": "Karaoke - aktivt ord pop",
+ "AdvancedEffectFancyKaraokeDescription": "Forbedrer undertekster med et forhåndsmarkert aktivt ord (via \\u1 understreking eller uthevingsfarge) — demper inaktive ord og bruker en pop-glød-animasjon på det aktive ordet",
+ "AdvancedEffectScrambleReveal": "Kode-avsløring",
+ "AdvancedEffectScrambleRevealDescription": "Krypterte tegn dekodes til den virkelige teksten fra venstre til høyre",
+ "AdvancedEffectRainbowPulse": "Regnbue-puls",
+ "AdvancedEffectRainbowPulseDescription": "Hvert tegn går gjennom regnbuefarger uavhengig av hverandre",
+ "AdvancedEffectWave": "Bølge",
+ "AdvancedEffectWaveDescription": "Hvert tegn pulserer opp og ned med en rullende sinusbølge-effekt",
+ "AdvancedEffectWaveBlue": "Bølge (blå)",
+ "AdvancedEffectWaveBlueDescription": "Hvert tegn pulserer i en bølge med blå og cyan fargeanimasjon",
+ "AdvancedEffectStarWarsScroll": "Star Wars-rulling",
+ "AdvancedEffectStarWarsScrollDescription": "Ruller tekst fra bunn til topp med en perspektivtilt, som i Star Wars' åpningstekst",
+ "AdvancedEffectEndCreditsScroll": "Rulletekst",
+ "AdvancedEffectEndCreditsScrollDescription": "Ruller alle undertekstlinjer fra bunn til topp som en kontinuerlig rulletekst",
+ "AdvancedEffectStarfield": "Uendelig stjernefelt (bakgrunn)",
+ "AdvancedEffectStarfieldDescription": "Kontinuerlig warp-speed stjernefelt-effekt",
+ "AdvancedEffectRain": "Uendelig regn (bakgrunn)",
+ "AdvancedEffectRainDescription": "Kontinuerlig regn med dybdeskarphet-lag",
+ "AdvancedEffectSnow": "Uendelig snø (bakgrunn)",
+ "AdvancedEffectSnowDescription": "Kontinuerlig snøfall med dybdeskarphet-lag",
+ "AdvancedEffectOldMovie": "Gammel film-effekt (bakgrunn)",
+ "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",
+ "AdvancedEffectBounceInDescription": "Hvert tegn spretter inn med elastisk pop-animasjon, forskjøvet fra venstre til høyre",
+ "AdvancedEffectFireflies": "Ildfluer (bakgrunn)",
+ "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",
+ "AdvancedEffectConfettiDescription": "Eksplosivt utbrudd av fargerik spinnende papirkonfetti fra hjørnene og en stjerneburst i midten for hver undertekst",
+ "AdvancedEffectHearts": "Hjerter (regn)",
+ "AdvancedEffectHeartsDescription": "Bezier-tegnede hjerter i tre former regner forsiktig fra toppen av skjermen, tumler og fader gjennom hele underteksten",
+ "AdvancedEffectWordSpacing": "Ordavstand",
+ "AdvancedEffectWordSpacingDescription": "Øker avstanden mellom ord ved hjelp av \\fsp-koden for bedre lesbarhet",
+ "AdvancedEffectFancyKaraokeAutoDetectActiveWord": "Autodetekter aktivt ord",
+ "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",
+ "AdvancedEffectSlowZoomIn": "Sakte zoom-inn",
+ "AdvancedEffectSlowZoomInDescription": "Teksten starter i normal størrelse og vokser forsiktig over undertekstens varighet",
+ "AdvancedEffectFadeIn": "Overgang - inntoning",
+ "AdvancedEffectFadeInDescription": "En per-linje inntoning-effekt hvor skjermen starter svart og avslører videoen.",
+ "AdvancedEffectFadeOut": "Overgang - uttoning",
+ "AdvancedEffectFadeOutDescription": "En per-linje uttoning-effekt hvor skjermen ender svart.",
+ "AdvancedEffectTvClose": "Overgang - TV-slukking",
+ "AdvancedEffectTvCloseDescription": "Svarte stenger vokser innover fra topp og bunn mens midten tones til hvit (svart topp / hvit midt / svart bunn). Andre halvdel er helt svart.",
+ "AdvancedEffectSlideInLeft": "Gli inn fra venstre",
+ "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",
+ "OverrideTagsHistory": "Historikk for overstyringskoder"
+ },
+ "About": {
+ "Title": "Om Subtitle Edit",
+ "TranslatedBy": "Oversatt av: {0}",
+ "LicenseText": "Subtitle Edit er gratis programvare under MIT-lisensen.",
+ "DescriptionTextBeta": "Subtitle Edit 5 beta er en utviklingsversjon av vår kommende store utgivelse.\nVi foredler aktivt de nye verktøyene og setter pris på din hjelp med testing.\nVennligst del tilbakemeldingen din for å hjelpe oss med å sikre en best mulig endelig versjon.\n\nTakk for at du er en del av Subtitle Edit-samfunnet! :)",
+ "IssueTrackingAndSourceCode": "Feilsporing og kildekode: ",
+ "GitHub": "Github",
+ "Donate": "Doner: ",
+ "PayPal": "PayPal",
+ "GitHubSponsor": "Github sponsor",
+ "Or": " eller "
+ }
+}
\ No newline at end of file
diff --git a/src/UI/Assets/Languages/Portuguese (Brazil).json b/src/UI/Assets/Languages/Portuguese (Brazil).json
index f73d3678b50..d983962b65d 100644
--- a/src/UI/Assets/Languages/Portuguese (Brazil).json
+++ b/src/UI/Assets/Languages/Portuguese (Brazil).json
@@ -131,6 +131,7 @@
"DoNoChange": "Não alterar",
"Done": "Concluído",
"DoubleWords": "Palavras duplas",
+ "DoubleLines": "Linhas duplas",
"Download": "Baixar",
"DownloadX": "Baixar {0}",
"DownloadingX": "Baixando {0}",
@@ -246,6 +247,7 @@
"InsertAtPositionAndFocusTextBox": "Inserir legenda na posição do vídeo e focar caixa de texto",
"InsertAtPositionNoFocusTextBox": "Inserir legenda na posição do vídeo (sem caixa de texto focada)",
"InsertBefore": "Inserir antes",
+ "InsertLine": "Inserir linha",
"InsertNewSelection": "Inserir nova seleção",
"InsertSubtitleAfterCurrentLine": "Inserir legenda após a linha atual...",
"InsertSubtitleFileAtVideoPositionDotDotDot": "Inserir arquivo de legenda na posição do vídeo...",
@@ -308,6 +310,7 @@
"NewDotDotDot": "Novo...",
"NewProfile": "Novo perfil",
"NewSubtitleStartKeyDownSetEndKeyUp": "Inserir legenda: Início com seta para baixo, fim com seta para cima",
+ "SetSubtitleStartAtVideoPositionSetEndAtKeyUpAndGoToNext": "Definir início na posição do vídeo, definir fim com tecla para cima e ir para próximo",
"No": "Não",
"NoFilesToConvert": "Nenhum arquivo para converter",
"NoLanguageCode": "Nenhum código de idioma",
@@ -482,6 +485,7 @@
"ShowCpsColumn": "Mostrar coluna \"Caracteres/seg.\"",
"ShowDurationColumn": "Mostrar coluna \"Duração\"",
"ShowGapColumn": "Mostrar coluna \"Pausa\"",
+ "ShowStartColumn": "Mostrar coluna \"Início\"",
"ShowHideColumn": "Mostrar coluna \"Ocultar\"",
"ShowHistory": "Mostrar histórico",
"ShowLayerColumn": "Mostrar coluna \"Camada\"",
@@ -490,6 +494,7 @@
"ShowStyleColumn": "Mostrar coluna \"Estilo\"",
"ShowTimeCodes": "Mostrar códigos de tempo",
"ShowWpmColumn": "Mostrar coluna \"Palavras/min.\"",
+ "ShowPixelWidthColumn": "Mostrar coluna \"Largura do pixel\"",
"Shrink": "Encolher",
"SingleBox": "Caixa única",
"SingleLineLengths": "Comprimento linha única:",
@@ -627,6 +632,7 @@
"Width": "Largura",
"WindowPositionAndSize": "Posição e tamanho da janela",
"WordsPerMin": "Palavras/min.",
+ "PixelWidth": "Largura do pixel",
"Wpm": "Palavras/min.",
"XFiles": "{0:#,###,##0} arquivos",
"XFilesConvertedInY": "{0:#,###,##0} arquivos convertidos em {1}",
@@ -638,7 +644,10 @@
"CopyToClipboard": "Copiar para a área de transferência",
"PlayCurrent": "Reproduzir atual",
"LeftMargin": "Margem esquerda",
- "RightMargin": "Margem direita"
+ "RightMargin": "Margem direita",
+ "Installed": "Instalado",
+ "AdvancedDotDotDot": "Avançado...",
+ "ChooseAlignment": "Escolha o alinhamento"
},
"Main": {
"AudioTrackIsNowX": "A faixa de áudio agora é \"{0}",
@@ -783,6 +792,7 @@
"MergeLinesWithSameTimeCodes": "Unir linhas com os mesmos códigos de tempo...",
"SplitBreakLongLines": "Dividir",
"MergeShortLines": "Mesclar linhas curtas...",
+ "Renumber": "Numerar novamente...",
"RemoveTextForHearingImpaired": "_Remover texto para surdos...",
"ConvertActors": "Converter atores...",
"JoinSubtitles": "_Juntar legendas...",
@@ -802,6 +812,7 @@
"SpellCheckTitle": "_Verificação ortográfica",
"SpellCheck": "_Verificação ortográfica...",
"FindDoubleWords": "_Localizar palavras duplicadas",
+ "FindDoubleLines": "_Localizar linhas duplas...",
"AddNameToNamesList": "_Adicionar nome à lista de nomes...",
"GetDictionaries": "_Obter dicionários...",
"Video": "_Vídeo",
@@ -836,6 +847,7 @@
"HelpTitle": "A_juda",
"Help": "_Ajuda",
"About": "So_bre...",
+ "CheckForUpdates": "_Verificar por atualizações...",
"FixRightToLeftViaUnicodeControlCharacters": "Corrigir RTL via caracteres de controle Unicode (linhas selecionadas)",
"RemoveUnicodeControlCharacters": "Remover caracteres de controle Unicode (das linhas selecionadas)",
"ReverseRightToLeftStartEnd": "Reverter início/fim RTL (para linhas selecionadas)",
@@ -1130,6 +1142,9 @@
"CpsGreaterThan": "CPS maior que",
"LengthLessThan": "Tamanho menor que",
"LengthGreaterThan": "Tamanho maior que",
+ "PixelLengthGreaterThan": "Tamanhdo do pixel maior que",
+ "GapLessThan": "Pausa em ms <",
+ "GapGreaterThan": "Pausa em ms >",
"ExactlyOneLine": "Exatamente uma linha",
"ExactlyTwoLines": "Exatamente duas linhas",
"MoreThanTwoLines": "Mais de duas linhas",
@@ -1149,7 +1164,13 @@
"NewCategory": "Nova categoria",
"CategoryName": "Nome da categoria",
"ExportReplaceRules": "Exportar regras",
- "AppliedRules": "Regras aplicadas"
+ "AppliedRules": "Regras aplicadas",
+ "FindRule": "Localizar regra",
+ "XLinesAffected": "{0:#,##0} linhas afetadas",
+ "DeleteCategoryConfirm": "Excluir categoria '{0}'?",
+ "DeleteRuleConfirm": "Excluir regra '{0}'?",
+ "FindWhat": "Localizar o que",
+ "DescriptionOptional": "Descrição (opcional)"
},
"Find": {
"SearchTextWatermark": "Pesquisar texto...",
@@ -1294,7 +1315,9 @@
"BackToFixList": "Voltar à lista de correções",
"ApplyFixesAndClose": "Aplicar correções e fechar",
"FixCommonOcrErrorsStep2": "Corrija erros comuns, etapa 2 (aplicar correções)",
- "FixCommonOcrErrorsStep2FixesFoundX": "Corrigir erros comuns, etapa 2 – Correções encontradas: {0}"
+ "FixCommonOcrErrorsStep2FixesFoundX": "Corrigir erros comuns, etapa 2 – Correções encontradas: {0}",
+ "Action": "Ação",
+ "ApplySelectedFixes": "Aplicar correções selecionadas"
},
"AdjustDurations": {
"Title": "Ajustar durações",
@@ -1351,6 +1374,10 @@
"PercentFoPrevious": "Pausa para anterior (%)",
"GapChange": "Mudança de pausa"
},
+ "Renumber": {
+ "Title": "Numerar novamente",
+ "StartFromNumber": "Iniciar do número:"
+ },
"SortBy": {
"Title": "Classificar legendas",
"SortOrder": "Ordem de classificação"
@@ -1470,6 +1497,24 @@
"ResizeImages": "Redimensionar imagens",
"Percentage": "Porcentagem",
"ResizeImagesInfo": "Insira a porcentagem para redimensionar as imagens.\r\nVisualize as alterações automaticamente."
+ },
+ "RemoveTextForHearingImpaired": {
+ "Title": "Remover texto para deficientes auditivos",
+ "Interjections": "Interjeições",
+ "SkipIfStartWith": "Pular se começar com",
+ "RemoveTextBetween": "Remover texto entre",
+ "Brackets": "Colchetes",
+ "CurlyBrackets": "Chaves",
+ "Parentheses": "Parênteses",
+ "And": "e",
+ "OnlySeparateLines": "Somente linhas separadas",
+ "RemoveTextBeforeColon": "Remover texto antes dos dois pontos",
+ "OnlyIfTextIsUppercase": "Somente se o texto estiver em letras maiúsculas",
+ "OnlyOnSeparateLine": "Somente em linha separada",
+ "IfLineIsUppercase": "Se a linha estiver em maiúscula",
+ "IfLineContains": "Se a linha contiver",
+ "IfLineOnlyContainsMusicSymbols": "Se a linha contiver apenas símbolos musicais",
+ "RemoveInterjections": "Remover interjeições"
}
},
"SpellCheck": {
@@ -1523,6 +1568,8 @@
"AddCurrentSubtitle": "Adicionar legenda atual",
"TitleOrLanguage": "Título/idioma",
"ViewMatroskaTrackX": "Ver trilha Matroska - {0}",
+ "ResolutionSeparator": "x",
+ "OpenFromUrlTitle": "Abrir arquivo de vídeo da URL",
"BurnIn": {
"Title": "Gerar vídeo com legendas fixas",
"InfoAssaOff": "Nota: estilo Advanced Substation Alpha suportado.",
@@ -1590,7 +1637,15 @@
"SelectModel": "Selecionar modelo",
"ViewWhisperLogFile": "Ver arquivo de registro do Whisper",
"ReDownloadX": "Baixar novamente {0}",
- "DownloadingSpeechToTextModel": "Baixando modelo de fala para texto"
+ "DownloadingSpeechToTextModel": "Baixando modelo de fala para texto",
+ "WhisperPostProcessingTitle": "Pós-processamento do Whisper",
+ "AdjustTimings": "Ajustar tempos",
+ "MergeShortLines": "Unir linhas curtas",
+ "BreakSplitLongLines": "Quebrar/dividir linhas longas",
+ "FixShortDuration": "Corrigir curta duração",
+ "FixCasing": "Corrigir maiúsculas/minúsculas",
+ "AddPeriods": "Adicionar pontos",
+ "ChangeUnderlineToColor": "Alterar sublinhado para cor"
},
"TextToSpeech": {
"Title": "Texto para fala",
@@ -1614,7 +1669,31 @@
"RegenerateAudio": "Regenerar áudio",
"AutoContinuePlaying": "Continuar reproduzindo automaticamente",
"AddingAudioToVideoFileDotDotDot": "Adicionando áudio ao arquivo de vídeo...",
- "PreparingMergeDotDotDot": "Preparando união..."
+ "PreparingMergeDotDotDot": "Preparando união...",
+ "ImportVoiceDotDotDot": "Importar voz...",
+ "VoiceImportSuccessTitle": "Voz importada",
+ "VoiceXImported": "Voz '{0}' importada com sucesso",
+ "AdvancedTtsSettings": "Configuraçõ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.",
+ "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.",
+ "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 os intervalos de silêncio, mantendo a fala intacta. Este é o primeiro passo preferido – reduz a duração sem qualquer perda de qualidade.",
+ "MaxSilenceMs": "Silêncio máximo (ms)",
+ "HighQualityTimeStretch": "Alongamento de tempo de alta qualidade (WSOLA/elástico)",
+ "HighQualityTimeStretchDescription": "Usa o algoritmo elástico (WSOLA) em vez do filtro atempo padrão para alterações de velocidade que preservam o tom. Produz uma fala com som mais natural, especialmente em fatores de velocidade mais elevados. Requer librubberband em sua compilação FFmpeg - volta ao atempo automaticamente se não estiver disponível.",
+ "SilencePaddingMs": "Preenchimento de silêncio (ms)",
+ "SilencePaddingMsDescription": "Adiciona um breve silêncio no final de cada segmento. Útil para pausas entre as frases.",
+ "OutputSampleRate": "Taxa de amostragem de saída (0 = padrão)",
+ "OutputSampleRateDescription": "Reamostra todos os segmentos para a taxa de amostragem especificada (por exemplo, 44100, 48000). Defina como 0 para manter a taxa original.",
+ "EdgeTtsRate": "Taxa Edge-TTS",
+ "EdgeTtsRateDescription": "Taxa de fala para Edge-TTS, por ex. \"+50%\", \"-30%\" ou \"+0%\" como padrão.",
+ "EdgeTtsPitch": "Tom Edge-TTS",
+ "EdgeTtsPitchDescription": "Ajuste de tom para Edge-TTS, por ex. \"+10Hz\", \"-5Hz\" ou \"+0Hz\" como padrão.",
+ "EdgeTtsVolume": "Volume Edge-TTS",
+ "EdgeTtsVolumeDescription": "Ajuste de volume para Edge-TTS, por ex. \"+20%\", \"-10%\" ou \"+0%\" como padrão."
},
"ShotChanges": {
"TitleGenerateOrImport": "Gerar/importar mudanças de cena",
@@ -1688,7 +1767,9 @@
"PointSync": "Ponto de sincronização...",
"PointSyncViaOther": "Pontos de sincronização via outra legenda",
"AdjustmentX": "Ajuste: {0}",
- "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"
+ "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",
+ "OffsetInSeconds": "Deslocamento em segundos",
+ "SpeedFactor": "Fator de velocidade"
},
"Translate": {
"TranslateViaCopyPaste": "Traduzir automaticamente via copiar/colar...",
@@ -1699,7 +1780,11 @@
"ReCopyTextToClipboard": "Copiar novamente texto para a área de transferência (para tradutor/IA)",
"BlockXOfY": "Bloco {0} de {1}",
"NoTextInClipboard": "Nenhum texto na área de transferência",
- "TextInClipboardIsSameAsSourceText": "O texto na área de transferência é igual ao texto fonte. Tente novamente."
+ "TextInClipboardIsSameAsSourceText": "O texto na área de transferência é igual ao texto fonte. Tente novamente.",
+ "LineMerge": "Unir linha",
+ "DelayInSecondsBetweenRequests": "Atraso em segundos entre solicitações",
+ "MaxBytesPerRequest": "Máximo de bytes por solicitação",
+ "PromptText": "Texto de solicitação"
},
"Options": {
"Settings": {
@@ -1792,7 +1877,7 @@
"MaxLines": "Colorir texto se tiver mais de {0} linhas",
"UnbreakSubtitlesShortThan": "Unir legendas menores que",
"NewEmptyDefaultMs": "Duração padrão da nova legenda (ms)",
- "PromptDeleteLines": "Confirmar eliminação de linhas",
+ "PromptBeforeDelete": "Avisar antes de excluir",
"RememberPositionAndSize": "Lembrar tamanho e posição da janela principal",
"AutoBackupOn": "Backup automático",
"AutoBackupIntervalMinutes": "Intervalo de backup automático (minutos)",
@@ -1940,6 +2025,8 @@
"SplitOddLinesAction": "Ação de dividir linhas ímpares",
"OcrUseWordSplitList": "OCR: use lista de divisão de palavras",
"SpeechToTextSelectedLinesPromptFistTimeOnly": "Fala em texto: linhas selecionadas, solicitação de idioma/mecanismo apenas na primeira vez",
+ "MultipleReplaceShowDotDotDotButtons": "Substituição múltipla: mostra botões do menu de contexto",
+ "GridFocusTextboxAfterInsertNew": "Grade: focar caixa de texto após inserir nova legenda",
"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)",
@@ -1955,7 +2042,8 @@
"AllSettings": "Todas as configurações",
"UiScale": "Escala da interface (%)",
"WaveformToolbarItems": "Itens da barra de ferramentas da forma de onda",
- "MatchIconColorToDarkTheme": "Combinar cor do ícone com a cor de primeiro plano do tema escuro"
+ "MatchIconColorToDarkTheme": "Combinar cor do ícone com a cor de primeiro plano do tema escuro",
+ "SubtitlePreviewProperties": "Propriedades de pré-visualização de legendas"
},
"Shortcuts": {
"Title": "Atalhos",
@@ -2165,6 +2253,7 @@
"GoToPreviousError": "Ir para erro anterior",
"AddNameToNameList": "Adicionar nome à lista de nomes",
"FindDoubleWords": "Encontrar palavras duplas",
+ "FindDoubleLines": "Localizar linhas duplas",
"ColorX": "Cor {0}",
"RemoveColor": "Remover cor",
"SurroundWith": "Cercar com...",
@@ -2225,7 +2314,13 @@
}
},
"Help": {
- "AboutSubtitleEdit": "Sobre o Subtitle Edit"
+ "AboutSubtitleEdit": "Sobre o Subtitle Edit",
+ "CheckForUpdates": "Verifique por atualizações",
+ "CheckForUpdatesChecking": "Verificando atualizações...",
+ "CheckForUpdatesUpToDate": "Você está executando a versão mais recente.",
+ "CheckForUpdatesNewVersionAvailable": "Nova versão disponível: {0}",
+ "CheckForUpdatesUnableToCheck": "Não foi possível verificar se há atualizações.",
+ "CheckForUpdatesDownloadNewVersion": "Baixar nova versão"
},
"Ocr": {
"LinesToDraw": "Linhas para desenhar",
@@ -2295,7 +2390,8 @@
"RemoveXFromUnknownWordsList": "Remover \"{0}\" da lista de palavras desconhecidas",
"DownloadingPaddleOcrEngineDotDotDot": "Baixando o mecanismo Paddle OCR...",
"DownloadingPaddleOcrModelsDotDotDot": "Baixando modelos Paddle OCR...",
- "PaddleOcr": "Paddle OCR"
+ "PaddleOcr": "Paddle OCR",
+ "BinaryImageCompareInspectImageMatches": "\"Comparação de imagens binárias\" - inspecionar correspondências de imagens"
},
"Assa": {
"AssaDraw": "Desenho ASSA",
@@ -2355,6 +2451,13 @@
"BackgroundBoxCircle": "Círculo",
"BackgroundBoxSpikes": "Espinhos",
"BackgroundBoxBubbles": "Bolhas",
+ "BackgroundBoxWave": "Onda",
+ "BackgroundBoxHexagon": "Hexágono",
+ "BackgroundBoxTornPaper": "Papel rasgado",
+ "BackgroundBoxCloud": "Nuvem",
+ "BackgroundBoxTornPaperDouble": "Papel rasgado (superior e inferior)",
+ "BackgroundBoxStarburst": "Explosão estelar",
+ "BackgroundBoxScroll": "Rolagem / Pergaminho",
"StylesTitle": "Estilos alfa avançados de subestação",
"StylesInFile": "Estilos em arquivo",
"StylesSaved": "Estilos salvos",
@@ -2407,6 +2510,8 @@
"AdvancedEffectWordByWordDescription": "Revela o texto, uma palavra por vez, durante a duração da legenda",
"AdvancedEffectKaraoke": "Karaokê",
"AdvancedEffectKaraokeDescription": "Destaca cada caractere em sequência, revelando o texto da esquerda para a direita, como letras de karaokê",
+ "AdvancedEffectFancyKaraoke": "Karaokê - palavra ativa pop",
+ "AdvancedEffectFancyKaraokeDescription": "Aprimora as legendas com uma palavra ativa pré-marcada (por meio de sublinhado ou cor de destaque) — escurece as palavras inativas e aplica uma animação pop-glow à palavra ativa",
"AdvancedEffectScrambleReveal": "Revelação de embaralhamento",
"AdvancedEffectScrambleRevealDescription": "Caracteres embaralhados são decodificados no texto real da esquerda para a direita",
"AdvancedEffectRainbowPulse": "Pulso arco-íris",
@@ -2448,7 +2553,32 @@
"AdvancedEffectConfetti": "Explosão de confete",
"AdvancedEffectConfettiDescription": "Explosão explosiva de confetes de papel giratório colorido de poppers de canto e uma estrela central em cada legenda",
"AdvancedEffectHearts": "Corações (chuva)",
- "AdvancedEffectHeartsDescription": "Corações desenhados em Bézier em três formas chovem suavemente do topo da tela, caindo e desaparecendo ao longo de cada legenda"
+ "AdvancedEffectHeartsDescription": "Corações desenhados em Bézier em três formas chovem suavemente do topo da tela, caindo e desaparecendo ao longo de cada legenda",
+ "AdvancedEffectWordSpacing": "Espaçamento entre palavras",
+ "AdvancedEffectWordSpacingDescription": "Aumenta o espaçamento entre palavras usando a tag \\fsp para melhor legibilidade",
+ "AdvancedEffectFancyKaraokeAutoDetectActiveWord": "Detectar automaticamente a palavra ativa",
+ "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",
+ "AdvancedEffectSlowZoomIn": "Aumento lento do zoom",
+ "AdvancedEffectSlowZoomInDescription": "O texto começa no tamanho normal e aumenta ligeiramente ao longo da duração da legenda",
+ "AdvancedEffectFadeIn": "Transição - fade-in",
+ "AdvancedEffectFadeInDescription": "Um efeito de fade-in por linha onde a tela começa preta e revela o vídeo.",
+ "AdvancedEffectFadeOut": "Transição - fade-out",
+ "AdvancedEffectFadeOutDescription": "Um efeito de fade-out por linha em que a tela fica preta.",
+ "AdvancedEffectTvClose": "Transição - Desligar TV",
+ "AdvancedEffectTvCloseDescription": "As barras pretas crescem para dentro, de cima para baixo, enquanto o meio fica branco (parte superior preta/meio branco/fundo preto).\r\nA segunda metade é preta sólida.",
+ "AdvancedEffectSlideInLeft": "Deslizar da esquerda",
+ "AdvancedEffectSlideInLeftDescription": "O texto desliza da esquerda para fora da tela, é mantido e sai de volta para a esquerda",
+ "AdvancedEffectSlideInRight": "Deslizar da direita",
+ "AdvancedEffectSlideInRightDescription": "O texto desliza da direita para fora da tela, é mantido e sai de volta para a direita",
+ "AdvancedEffectFadeInOut": "Fade in/out",
+ "AdvancedEffectFadeInOutDescription": "O texto aparece gradualmente no início e desaparece no final de cada legenda",
+ "OverrideTagsHistory": "Substituir histórico de tags"
},
"About": {
"Title": "Sobre o Subtitle Edit",
diff --git a/src/UI/Assets/Languages/Romanian.json b/src/UI/Assets/Languages/Romanian.json
new file mode 100644
index 00000000000..0f4a3ed1e35
--- /dev/null
+++ b/src/UI/Assets/Languages/Romanian.json
@@ -0,0 +1,2596 @@
+{
+ "title": "Subtitle Edit",
+ "version": null,
+ "translatedBy": "zildan v1 05.04.26",
+ "cultureName": "ro-RO",
+ "general": {
+ "abort": "Renunță",
+ "actor": "Actor",
+ "actors": "Actori",
+ "add": "Adăuga",
+ "addDotDotDot": "Adăuga...",
+ "addToNamesListCaseSensitive": "Adăugați la lista de nume (se face distincția între majuscule și minuscule)",
+ "addToUserDictionary": "Adăugați la dicționarul utilizatorului",
+ "addVideoFiles": "Adăugați fișiere video...",
+ "adjustAlpha": "Ajustați alfa (transparență)",
+ "adjustDisplayDuration": "Reglați durata de afișare",
+ "adjustment": "Ajustare",
+ "advanced": "Avansat",
+ "advancedSettings": "Setări avansate",
+ "after": "După",
+ "alignment": "Aliniere",
+ "alignmentDotDotDot": "Aliniere...",
+ "alignmentX": "Setați alinierea „{0}” pentru liniile selectate",
+ "all": "Toate",
+ "allFiles": "Toate fișierele",
+ "alphaAdjustment": "Ajustare alfa",
+ "aphaThreshold": "Pragul alfa",
+ "apiKey": "cheie API",
+ "apiSecret": "SecretAPI",
+ "appearance": "Aspect",
+ "append": "Adăuga",
+ "apply": "Aplicați",
+ "applyTo": "Aplica la",
+ "ascending": "Ascendent",
+ "attachDotDotDot": "Atașați...",
+ "audioFiles": "Fișiere audio",
+ "audioVisualizer": "Vizualizator audio",
+ "auto": "Auto",
+ "autoBreak": "Întreruperea automată a textului",
+ "autoContinue": "Continuare automată",
+ "autoTranslate": "Traducere automată",
+ "autodetect": "Detectare automată",
+ "background": "Fundal",
+ "backgroundColor": "Culoare de fundal",
+ "backward": "Înapoi",
+ "batchMode": "Modul lot",
+ "bdnXml": "BDN/xml",
+ "before": "Înainte",
+ "beforeX": "Înainte de „{0}”",
+ "beginning": "Început",
+ "bluRaySup": "Blu-ray (sup)",
+ "bold": "Îndrăzneţ",
+ "bookmarkAdd": "Adăugați marcaj",
+ "bookmarkAddForSelectedLinesX": "Adăugați marcaj pentru {0} linii selectate",
+ "bookmarkClearQuestion": "Ștergeți toate marcajele?",
+ "bookmarkDeleteSelectedQuestion": "Ștergeți marcajul selectat?",
+ "bookmarkDotDotDot": "Marcaj...",
+ "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",
+ "bottomRight": "Jos-Dreapta",
+ "box": "Cutie",
+ "boxColor": "Culoarea casetei",
+ "boxCornerRadius": "Raza colțului cutiei",
+ "boxPerLine": "Cutie pe linie",
+ "bridgeGaps": "Goluri de pod",
+ "cancel": "Renunță",
+ "cancelled": "Anulat",
+ "caseInsensitive": "Nu ține seama de majuscule",
+ "caseSensitive": "Caz sensibil",
+ "category": "Categorie",
+ "center": "Centru",
+ "centerHorizontally": "Centrați pe orizontală",
+ "centerVertically": "Centrați pe verticală",
+ "change": "Schimba",
+ "changeAll": "Schimbați totul",
+ "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",
+ "characters": "Personaje",
+ "charsPerSec": "Caractere/sec",
+ "chooseColorDotDotDot": "Alege culoarea...",
+ "chooseImageFiles": "Alegeți fișierele imagine",
+ "class": "Clasă",
+ "classic": "Clasic",
+ "clear": "Clar",
+ "close": "Aproape",
+ "codec": "Codec",
+ "collapse": "Colaps",
+ "color": "Culoare",
+ "colorDotDotDot": "Culoare...",
+ "column": "Coloană",
+ "consoleLog": "Jurnalul consolei",
+ "contentAlignment": "Alinierea conținutului",
+ "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",
+ "copyTextToClipboard": "Copiați textul în clipboard",
+ "couldNotSaveFileXErrorY": "Nu s-a putut salva fișierul „{0}”. ",
+ "count": "Conta",
+ "cps": "Caractere/sec",
+ "currentSubtitle": "Subtitrare curentă",
+ "currentVideoPosition": "Poziția video actuală",
+ "cut": "Tăiați",
+ "dark": "Întuneric",
+ "dateAndTime": "Data și ora",
+ "default": "Implicit",
+ "delete": "Şterge",
+ "deleteAtPosition": "Ștergeți subtitrarea la poziția videoclipului",
+ "deleteCurrentLine": "Ștergeți linia curentă",
+ "deleteFirstLines": "Ștergeți primele rânduri",
+ "deleteLastLines": "Șterge ultimele rânduri",
+ "deleteLineXPrompt": "Ștergeți numărul de linie {0}?",
+ "deleteLines": "Șterge linii",
+ "deleteLinesContainingText": "Ștergeți liniile care conțin text",
+ "deleteXLinesPrompt": "Ștergeți {0} rânduri?",
+ "description": "Descriere",
+ "dictionary": "Dicţionar",
+ "diskSpace": "Spațiu pe disc",
+ "doNoChange": "Nu te schimba",
+ "done": "Făcut",
+ "doubleWords": "Cuvinte duble",
+ "doubleLines": "Linii duble",
+ "download": "Descărcați",
+ "downloadX": "Descărcați {0}",
+ "downloadingX": "Se descarcă {0}",
+ "downloadingXPercent": "Se descarcă {0}%",
+ "duplicate": "Duplicat",
+ "duration": "Durată",
+ "durationMinutes": "Durata in minute",
+ "edit": "Edita",
+ "editDotDotDot": "Edita...",
+ "editing": "Editare",
+ "effect": "Efect",
+ "enabled": "Activat",
+ "encoding": "Codificare",
+ "endTime": "Ora de sfârșit",
+ "engine": "Motor",
+ "enterProfileName": "Introduceți numele profilului",
+ "error": "Eroare",
+ "errorX": "Eroare; ",
+ "example": "Exemplu",
+ "exampleX": "Exemplu: {0}",
+ "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)",
+ "extendSelectedToNext": "Extindeți selectat la următorul",
+ "extendSelectedToPrevious": "Extindeți selectat la precedentul",
+ "extractingAudioClips": "Se extrag clipuri audio...",
+ "fade": "Se estompează",
+ "fetchFirstWordFromNextSubtitle": "Preluați primul cuvânt din subtitrarea următoare",
+ "fileAlreadyExists": "Fișierul există deja",
+ "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.",
+ "fileXOfY": "Fișier {0} din {1}",
+ "filter": "Filtra",
+ "filterByLayer": "Filtrați după strat",
+ "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",
+ "fixRightToLeftViaUnicodeTags": "Remediați RTL prin etichete Unicode",
+ "fixedValue": "Valoare fixă",
+ "focusSelectedLine": "Focalizează linia selectată (defilează în vizualizare în grilă)",
+ "font": "Font",
+ "fontColor": "Culoarea fontului",
+ "fontHeight": "Înălțimea fontului",
+ "fontName": "Numele fontului",
+ "fontNameDotDotDot": "Numele fontului...",
+ "fontSize": "Dimensiunea fontului",
+ "fonts": "Fonturi",
+ "footer": "Subsol",
+ "forced": "Forţat",
+ "foreground": "Prim plan",
+ "format": "Format",
+ "forward": "Redirecţiona",
+ "foundNoMatches": "Nu s-au găsit potriviri",
+ "foundOneMatch": "Am găsit o potrivire",
+ "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ă...",
+ "generatingImageXofY": "Se generează imaginea {0:#,##0} din {1:#,##0}...",
+ "generatingWavFile": "Se generează fișierul wav...",
+ "getAudioClips": "Obțineți clipuri audio",
+ "goTo": "Du-te la",
+ "goToLineNumber": "Accesați numărul rândului",
+ "goToNextShotChange": "Treceți la următoarea schimbare a fotografiei",
+ "goToPreviousShotChange": "Treceți la schimbarea fotografiei anterioare",
+ "googleIt": "Google-l ",
+ "group": "Grup",
+ "header": "Antet",
+ "height": "Înălţime",
+ "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ă",
+ "imagedBasedSubtitles": "Subtitrări bazate pe imagini",
+ "images": "Imagini",
+ "imagesWithTimeCode": "Imagini cu cod temporal",
+ "import": "Import",
+ "importDotDotDot": "Import...",
+ "include": "Include",
+ "information": "Informaţii",
+ "insertAfter": "Inserați după",
+ "insertAtPositionAndFocusTextBox": "Introduceți subtitrare la poziția videoclipului și focalizați caseta de text",
+ "insertAtPositionNoFocusTextBox": "Inserați subtitrare la poziția videoclipului (fără casetă de text focalizată)",
+ "insertBefore": "Introduceți înainte",
+ "insertLine": "Inserați linia",
+ "insertNewSelection": "Introduceți o nouă selecție",
+ "insertSubtitleAfterCurrentLine": "Introduceți subtitrare după linia curentă...",
+ "insertSubtitleFileAtVideoPositionDotDotDot": "Inserați fișierul de subtitrare la poziția videoclipului...",
+ "inspectAdditions": "Verificați completările...",
+ "invertSelection": "Inversați selecția",
+ "isDefault": "Este implicit",
+ "italic": "Cursiv",
+ "keepExistingTimeCodes": "Păstrați codurile de timp existente (nu adăugați decalaj video)",
+ "keyFile": "Fișierul cheii",
+ "language": "Limbă",
+ "languagePostFix": "Limbă post-fix (mkv/mp4)",
+ "layer": "Strat",
+ "layerFilterOn": "Filtru de straturi activat",
+ "left": "Stânga",
+ "light": "Aprinde",
+ "lineHeigth": "Înălțimea liniei",
+ "lineNumber": "Linia#",
+ "lineXColumnY": "Linia {0}, coloana {1}",
+ "lines": "Linii",
+ "linesAddedX": "Rânduri adăugate: {0}",
+ "linesChangedX": "Liniile modificate: {0}",
+ "linesDeletedX": "Linii șterse: {0}",
+ "listErrors": "Enumeră erorile",
+ "loadDefaults": "Încărcați valorile implicite",
+ "lockTimeCodes": "Blocați codurile de timp",
+ "logo": "Logo",
+ "margin": "Marja",
+ "match": "Meci",
+ "maxCharactersPerSecond": "Maximum de caractere pe secundă",
+ "mediaInformation": "Informații media",
+ "mergeAfter": "Îmbinați cu linia de după",
+ "mergeBefore": "Îmbinați cu linia de dinainte",
+ "mergeLines": "Îmbina liniile",
+ "mergeLinesWithSameText": "Îmbina liniile cu același text",
+ "mergeLinesWithSameTimeCodes": "Îmbina liniile cu aceleași coduri de timp",
+ "mergeSelected": "Îmbinare selectată",
+ "mergeSelectedAsDialog": "Îmbinați selectat ca dialog",
+ "mergeSelectedLines": "Îmbina liniile selectate",
+ "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)",
+ "mergeWithLineBeforeAndAutoBreak": "Îmbinați cu linia înainte și auto-break",
+ "mergeWithLineBeforeKeepBreaks": "Îmbinați cu linia înainte (păstrați pauzele)",
+ "middleCenter": "Centru-Mijloc",
+ "middleLeft": "Mijloc-Stânga",
+ "middleRight": "Mijloc-Dreapta",
+ "milliseconds": "Milisecunde",
+ "model": "Model",
+ "models": "Modele",
+ "more": "Mai mult",
+ "moreInfo": "Mai multe informații",
+ "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",
+ "moveUp": "Mișcă-te în sus",
+ "multipleReplace": "Înlocuire multiplă",
+ "name": "Nume",
+ "negative": "Negativ",
+ "new": "Nou",
+ "newDotDotDot": "Nou...",
+ "newProfile": "Profil nou",
+ "newSubtitleStartKeyDownSetEndKeyUp": "Inserați subtitrare: Începeți cu tasta în jos, setați sfârșitul cu tasta sus",
+ "setSubtitleStartAtVideoPositionSetEndAtKeyUpAndGoToNext": "Setați începutul la poziția video, setați sfârșitul pe tasta sus și treceți la următorul",
+ "no": "Nu",
+ "noFilesToConvert": "Nu există fișiere de convertit",
+ "noLanguageCode": "Fără cod de limbă",
+ "noSubtitleLoaded": "Nu s-a încărcat subtitrare",
+ "noSubtitlesFound": "Nu s-au găsit subtitrări!",
+ "noSymbolLines": "#Linii",
+ "noVideoLoaded": "Niciun videoclip încărcat",
+ "none": "Nici unul",
+ "normalCasing": "Carcasă normală",
+ "notAvailable": "N / A",
+ "notInstalled": "Neinstalat",
+ "number": "Număr",
+ "numberSymbol": "#",
+ "ocrDotDotDot": "OCR...",
+ "ocrPercentX": "OCR: {0}%",
+ "offset": "Offset",
+ "offsetTimeCodes": "Offset coduri de timp",
+ "offsetX": "Offset X",
+ "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...",
+ "openVideoFileTitle": "Deschideți fișierul video",
+ "optimalCharactersPerSecond": "Caractere optime pe secundă",
+ "options": "Opțiuni",
+ "originalText": "Textul original",
+ "outline": "Contur",
+ "outlineColor": "Culoarea conturului",
+ "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?",
+ "padding": "Captuseala",
+ "parameters": "Parametrii",
+ "parsingXDotDotDot": "Se analizează {0}...",
+ "paste": "Pastă",
+ "pasteNewSelection": "Lipiți textul clipboard în noua selecție",
+ "pause": "Pauză",
+ "percent": "La sută",
+ "pickLayer": "Setați stratul",
+ "pickOllamaModel": "Alege modelul Ollama",
+ "pickOutputFolder": "Alegeți folderul de ieșire",
+ "pickResolutionFromCurrentVideo": "Alegeți rezoluția din videoclipul curent",
+ "pickResolutionFromVideoDotDotDot": "Alegeți rezoluția din videoclip...",
+ "pickSubtitleFile": "Alegeți fișierul de subtitrare...",
+ "pickVideoFile": "Alegeți fișierul video...",
+ "pickVideoPosition": "Alegeți poziția video",
+ "play": "Juca",
+ "playFromStartOfVideo": "Redați de la începutul videoclipului",
+ "playNext": "Joacă în continuare",
+ "playSelectedLines": "Redați liniile selectate",
+ "playSelectedLinesWithLoop": "Redați liniile selectate cu buclă",
+ "pleaseEnterAValidValueForX": "Vă rugăm să introduceți o valoare validă pentru „{0}”",
+ "pleaseWait": "Va rugam asteptati...",
+ "position": "Poziţie",
+ "positionX": "Poziție: {0}",
+ "postProcessing": "Postprocesare",
+ "poweredBy": "Cu sprijinul",
+ "prefix": "Prefix",
+ "preview": "Previzualizare",
+ "profile": "Profil",
+ "profileName": "Numele profilului",
+ "profiles": "Profiluri",
+ "property": "Proprietate",
+ "question": "Întrebare",
+ "reDownloadX": "Descărcați din nou {0}",
+ "reason": "Motiv",
+ "recentFiles": "Fișiere recente",
+ "redo": "Reface",
+ "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",
+ "removeAllFormatting": "Eliminați toate formatările",
+ "removeBlankLines": "Eliminați liniile goale",
+ "removeBold": "Eliminați bold",
+ "removeColor": "Îndepărtați culoarea",
+ "removeFilter": "Scoateți filtrul",
+ "removeFontName": "Eliminați numele fontului",
+ "removeFormatting": "Eliminați formatarea",
+ "removeItalic": "Eliminați cursiv",
+ "removeRightToLeftUnicodeTags": "Eliminați etichetele RTL Unicode",
+ "removeSelectedFile": "Eliminați fișierul selectat?",
+ "removeStyling": "Eliminați stilul",
+ "removeTextForHearingImpaired": "Eliminați textul pentru persoanele cu deficiențe de auz",
+ "removeUnderline": "Eliminați sublinierea",
+ "rename": "Redenumiți",
+ "replace": "Înlocui",
+ "replaceWith": "Înlocuiește cu",
+ "requiresRestart": "Necesită repornire",
+ "reset": "Resetați",
+ "resolution": "Rezoluţie",
+ "resolutionX": "Rezoluție: {0}",
+ "reverseRightToLeftStartEnd": "Reverse RTL start/end",
+ "right": "Corect",
+ "rightToLeft": "De la dreapta la stânga",
+ "rules": "Reguli",
+ "saveChangesMessage": "Doriți să salvați modificările la fișierul de subtitrare curent?",
+ "saveChangesTitle": "Salvați modificările?",
+ "saveChangesToX": "Doriți să salvați modificările aduse „{0}”?",
+ "saveChangesToXOriginal": "Doriți să salvați modificările aduse fișierului de subtitrare original „{0}”?",
+ "saveDotDotDot": "Salva...",
+ "saveFileAsTitle": "Salvați fișierul ca",
+ "saveImageAs": "Salvați imaginea ca",
+ "saveImageAsDotDotDot": "Salvați imaginea ca...",
+ "saveOriginalAsTitle": "Salvați originalul ca",
+ "saveTranslationAsTitle": "Salvați traducerea ca",
+ "saveVideoAsVideoTitle": "Salvați videoclipul ca",
+ "savedChangesToX": "Salvat „{0}”",
+ "savedChangesToXAndY": "„{0}” și „{1}” au fost salvate",
+ "savingDotDotDot": "Economisire...",
+ "script": "Scenariul",
+ "search": "Căutare",
+ "searchDirection": "Direcția de căutare",
+ "searchFontNames": "Căutați numele fonturilor...",
+ "searchSubtitleFormats": "Căutați formate de subtitrare",
+ "seconds": "secunde",
+ "selectAll": "Selectați toate",
+ "selectFilesToConvert": "Selectați fișierele de convertit",
+ "selectNone": "Selectați niciunul",
+ "selectSaveFolder": "Selectați un dosar în care să salvați",
+ "selectSubtitle": "Selectați subtitrarea",
+ "selectedAFolderToSaveTo": "S-a selectat un folder în care să se salveze",
+ "selectedLines": "Liniile selectate",
+ "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",
+ "setEndAndOffsetTheRest": "Setează capătul și compensează restul",
+ "setFontDotDotDot": "Setați fontul...",
+ "setStart": "Setează startul",
+ "setStartAndOffsetTheRest": "Setați startul și compensați restul",
+ "setVideoOffset": "Setați decalajul video",
+ "settings": "Setări",
+ "shadow": "Umbră",
+ "shadowColor": "Culoarea umbrei",
+ "shadowWidth": "Lățimea umbrei",
+ "shortcut": "Comandă rapidă",
+ "shortcutX": "Comandă rapidă: {0}",
+ "shortcuts": "Comenzi rapide",
+ "show": "Spectacol",
+ "showActorColumn": "Afișați coloana „Actor”.",
+ "showCpsColumn": "Afișați coloana „Caracteri/sec”.",
+ "showDurationColumn": "Afișați coloana „Durată”.",
+ "showGapColumn": "Afișați coloana „Gap”.",
+ "showStartColumn": "Afișați coloana „Start”.",
+ "showHideColumn": "Afișați coloana „Ascunde”.",
+ "showHistory": "Arată istoricul",
+ "showLayerColumn": "Afișați coloana „Strat”.",
+ "showPreview": "Afișează previzualizarea",
+ "showShotChangesList": "Afișează lista cu modificări de fotografiere",
+ "showStyleColumn": "Afișați coloana „Stil”.",
+ "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",
+ "size": "Dimensiune",
+ "sizeX": "Dimensiune: {0}",
+ "skip": "Sari peste",
+ "skipAll": "Sari peste toate",
+ "skipOnce": "Sari peste o data",
+ "smart": "Inteligent",
+ "snapSelectedLinesToNearestShotChange": "Fixați liniile selectate începutul/sfârșitul la cea mai apropiată schimbare a fotografiei",
+ "solidColor": "Culoare solidă",
+ "sourceViewX": "Vizualizare sursă - {0}",
+ "spacing": "Spațiere",
+ "speechToTextSelectedLines": "Vorbire în text selectat (consultați Opțiuni - Setări)",
+ "speechToTextSelectedLinesPromptAlways": "Vorbire în text liniile selectate (intotdeauna prompt motor/limba)",
+ "speechToTextSelectedLinesPromptFirstTime": "Rândurile selectate vorbire în text (motorul prompt/limbă numai prima dată)",
+ "speed": "Viteză",
+ "splitAtTextBoxCursorPosition": "Împărțire la poziția cursorului text",
+ "splitLine": "Linie împărțită",
+ "splitLineAtTextBoxCursorPosition": "Linie împărțită la poziția cursorului",
+ "splitLineAtVideoAndTextBoxPosition": "Linie împărțită în poziția video și a casetei de text",
+ "splitLineAtVideoPosition": "Linie împărțită la poziția video",
+ "startFrom": "Începe de la",
+ "startTime": "Ora de începere",
+ "startingDotDotDot": "Pornire...",
+ "status": "Stare",
+ "stereo": "Stereo",
+ "stop": "Stop",
+ "strikeout": "Strikeout",
+ "style": "Stil",
+ "styleExaggeration": "Exagerarea stilului",
+ "styleLanguage": "Stil / Limbă",
+ "styles": "Stiluri",
+ "subtitleFile": "Fișier cu subtitrare",
+ "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}",
+ "suffix": "Sufix",
+ "suggestions": "Sugestii",
+ "sync": "Sincronizare",
+ "syntaxColoring": "Colorarea sintaxelor",
+ "system": "Sistem",
+ "targetEncoding": "Codarea țintă",
+ "targetFormat": "Format țintă",
+ "tenHours": "10 ore",
+ "tenMilliseconds": "10 milisecunde",
+ "text": "Text",
+ "textColor": "Culoarea textului",
+ "textFiles": "Fișiere text",
+ "textOrImage": "Text/imagine",
+ "threeLetterLanguageCode": "Cod de limbă din trei litere",
+ "time": "Timp",
+ "timeCodes": "Codurile de timp",
+ "timing": "Sincronizare",
+ "title": "Titlu",
+ "to": "La",
+ "toggleCasing": "Comutați carcasa",
+ "toggleDirection": "Comutați direcția",
+ "toggleForced": "Comutare forțată",
+ "toggleShotChangesAtVideoPosition": "Comutați modificările de fotografiere la poziția videoclipului",
+ "toolbar": "Bara de instrumente",
+ "tools": "Instrumente",
+ "topCenter": "Sus-Centru",
+ "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",
+ "translateRow": "Traduceți rândul",
+ "translation": "Traducere",
+ "twoLetterLanguageCode": "Cod de limbă din două litere",
+ "type": "Tip",
+ "unbreak": "Desfaceți textul",
+ "unbreakLines": "Desfaceți liniile",
+ "underline": "Subliniați",
+ "undo": "Revenire",
+ "unknown": "Necunoscut",
+ "unknownSubtitleFormat": "Format necunoscut de subtitrare",
+ "unpacking7ZipArchiveDotDotDot": "Se despachetează arhiva 7-zip...",
+ "unpackingX": "Despachetarea {0}",
+ "untitled": "Fără titlu",
+ "update": "Actualizare",
+ "updateAndClose": "Actualizați și închideți",
+ "updateDetails": "Actualizați detaliile",
+ "updatedBy": "Actualizat de",
+ "url": "URL",
+ "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",
+ "video500MsBack": "Video, 500 de milisecunde înapoi",
+ "video500MsForward": "Video, 500 de milisecunde înainte",
+ "videoCustom1BackX": "Video, milisecunde personalizate ({0:#,###,##0}) înapoi, 1",
+ "videoCustom1ForwardX": "Videoclip, milisecunde personalizate ({0:#,###,##0}) înainte, 1",
+ "videoCustom2BackX": "Videoclip, milisecunde personalizate ({0:#,###,##0}) înapoi, 2",
+ "videoCustom2ForwardX": "Video, milisecunde personalizate ({0:#,###,##0}) înainte, 2",
+ "videoEncodingX": "Codificare video: {0}",
+ "videoExtension": "Extensie fișier video",
+ "videoFile": "Fișier video",
+ "videoFileGeneratedX": "Fișier video generat: „{0}”",
+ "videoFiles": "Fișiere video",
+ "videoInformation": "Informații video",
+ "videoOffset": "Compensare video",
+ "videoOneFrameBack": "Video, un cadru înapoi",
+ "videoOneFrameForward": "Video, un cadru înainte",
+ "videoOneSecondBack": "Video, o secundă înapoi",
+ "videoOneSecondForward": "Video, o secundă înainte",
+ "videoPlayer": "Player video",
+ "videoPosition": "Poziția video",
+ "videoResolution": "Rezoluție video",
+ "viewX": "Vedeți {0}",
+ "visible": "Vizibil",
+ "voice": "Voce",
+ "warning": "Avertizare",
+ "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",
+ "xFiles": "{0:#,###,##0} fișiere",
+ "xFilesConvertedInY": "{0:#,###,##0} fișiere convertite în {1}",
+ "xNotFound": "„{0}” nu a fost găsit",
+ "xRequiresAnApiKey": "!!!>>> JSON.parse: unexpected character at line 1 column 1 of the JSON data <<",
+ "cpsLessThan": "CPS <",
+ "cpsGreaterThan": "CPS >",
+ "lengthLessThan": "Lungime <",
+ "lengthGreaterThan": "Lungime >",
+ "pixelLengthGreaterThan": "Lungimea pixelilor >",
+ "gapLessThan": "Gap în ms <",
+ "gapGreaterThan": "Gap în ms >",
+ "exactlyOneLine": "Exact o linie",
+ "exactlyTwoLines": "Exact două rânduri",
+ "moreThanTwoLines": "Mai mult de două rânduri",
+ "bookmarked": "Marcat",
+ "bookmarkContains": "Marcaj conține",
+ "blankLines": "Linii goale",
+ "selectionNew": "Selecție nouă",
+ "selectionAdd": "Adăugați la selecție",
+ "selectionSubtract": "Scădeți din selecție",
+ "selectionIntersect": "Se intersectează cu selecția"
+ },
+ "multipleReplace": {
+ "title": "Înlocuire multiplă",
+ "editRule": "Editați regula",
+ "newRule": "Regulă nouă",
+ "editCategory": "Editați categoria",
+ "newCategory": "Noua categorie",
+ "categoryName": "Numele categoriei",
+ "exportReplaceRules": "Reguli de export",
+ "appliedRules": "Reguli aplicate",
+ "findRule": "Găsiți regula",
+ "xLinesAffected": "{0:#,##0} linii afectate",
+ "deleteCategoryConfirm": "Ștergeți categoria „{0}”?",
+ "deleteRuleConfirm": "Ștergeți regula „{0}”?",
+ "findWhat": "Găsiți ce",
+ "descriptionOptional": "Descriere (opțional)"
+ },
+ "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..."
+ },
+ "showHistory": "Istoric pentru anulare",
+ "restoreSelected": "Restabiliți selectat"
+ },
+ "tools": {
+ "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",
+ "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",
+ "removedEmptyLineInMiddle": "Îndepărtați linia goală din mijloc",
+ "removedEmptyLinesUnusedLineBreaks": "Eliminați liniile goale/întreruperile de linie neutilizate",
+ "fixOverlappingDisplayTimes": "Remediați timpul de afișare suprapus",
+ "fixShortDisplayTimes": "Fixați timpi scurti de afișare",
+ "fixLongDisplayTimes": "Fixați timpi lungi de afișare",
+ "fixShortGaps": "Remediați golurile scurte",
+ "fixInvalidItalicTags": "Remediați etichetele cursive nevalide",
+ "removeUnneededSpaces": "Eliminați spațiile care nu sunt necesare",
+ "removeUnneededPeriods": "Eliminați perioadele care nu sunt necesare",
+ "fixCommas": "Remediați virgulele",
+ "fixMissingSpaces": "Remediați spațiile lipsă",
+ "breakLongLines": "Rupe linii lungi",
+ "removeLineBreaks": "Eliminați întreruperile de rând în texte scurte cu o singură propoziție",
+ "removeLineBreaksAll": "Eliminați întreruperile de rând în texte scurte (toate cu excepția casetelor de dialog)",
+ "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 (\")",
+ "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",
+ "normalizeStrings": "Normalizați șirurile",
+ "fixTurkishAnsi": "Remediați literele turcești ANSI (islandeză) la Unicode",
+ "fixDanishLetterI": "Remediați litera daneză „i”",
+ "fixSpanishInvertedQuestionAndExclamationMarks": "Remediați semnele de întrebare și exclamare inversate spaniole",
+ "addMissingQuote": "Adăugați citatul lipsă (\")",
+ "addMissingQuotes": "Adăugați ghilimele lipsă (\")",
+ "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}",
+ "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ă",
+ "fixShortDisplayTime": "Remediați timpul scurt de afișare",
+ "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ă. ",
+ "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}",
+ "unableToFixTextXY": "Nu se poate remedia numărul textului {0}: {1}",
+ "unneededSpace": "Spațiu inutil",
+ "unneededPeriod": "Perioada inutila",
+ "fixMissingSpace": "Remediați spațiul lipsă",
+ "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 „--” -> „...”",
+ "fixDoubleGreaterThan": "Eliminați „>>”",
+ "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!' ",
+ "fixEllipsesStartExample": "'... și apoi noi' -> 'și apoi noi'",
+ "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",
+ "fixContinuationStyleX": "Remediați stilul de continuare: {0}",
+ "fixUnnecessaryLeadingDots": "Eliminați punctele principale inutile",
+ "fixCommonErrorsProfiles": "Remediați profilurile de erori comune",
+ "fixCommonOcrErrorsStep1": "Remediați erorile comune, pasul 1 (alegeți remedieri)",
+ "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",
+ "applySelectedFixes": "Aplicați corecțiile selectate"
+ },
+ "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)"
+ },
+ "applyDurationLimits": {
+ "title": "Aplicați limite de durată",
+ "fixMinDurationMs": "Fixați durata minimă (ms)",
+ "doNotGoPastShotChange": "Nu treceți de schimbarea loviturii",
+ "fixMaxDurationMs": "Fixați durata maximă (ms)",
+ "maxDurationShouldBeHigherThanMinDuration": "Durata maximă ar trebui să fie mai mare decât durata minimă",
+ "changedDurationFromXToYCommentZ": "S-a schimbat durata de la {0} la {1} {2}",
+ "onlyPartialFixed": "(doar remediere parțială)",
+ "unfixableX": "Neremediabil: {0}",
+ "fixedX": "Remediat: {0}",
+ "fixedXImprovedY": "Remedieri: {0}, Îmbunătățiri: {1}",
+ "noChangesNeeded": "Nu sunt necesare modificări"
+ },
+ "applyMinGaps": {
+ "title": "Aplicați intervale minime între subtitrări",
+ "numberOfGapsFixedX": "Numărul de goluri minime aplicate: {0}",
+ "minFramesBetweenLines": "Cadre minime între linii",
+ "minMsBetweenLines": "Minim milisecunde între linii",
+ "changedGapFromXToYCommentZ": "S-a schimbat decalajul de la {0} la {1} {2}"
+ },
+ "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ă"
+ },
+ "bridgeGaps": {
+ "title": "Goluri de pod",
+ "bridgeGapsSmallerThan": "Goluri de punte mai mici de (ms)",
+ "minGap": "Interval minim (ms)",
+ "numberOfSmallGapsBridgedX": "Numărul de goluri mici acoperite: {0}",
+ "percentFoPrevious": "Diferența anterioară (%)",
+ "gapChange": "Schimbarea decalajului"
+ },
+ "renumber": {
+ "title": "Renumerota",
+ "startFromNumber": "Începe de la numărul:"
+ },
+ "sortBy": {
+ "title": "Sortați subtitrări",
+ "sortOrder": "Ordinea de sortare"
+ },
+ "batchConvert": {
+ "title": "Conversie în lot",
+ "oneActionsSelected": "O acțiune selectată",
+ "xActionsSelected": "{0} acțiuni selectate",
+ "outputFolderSource": " Dosar de ieșire: folder sursă",
+ "outputFolderX": " Dosar de ieșire: {0}",
+ "encodingXOverwriteY": "Codificare: {0}, suprascrieți fișierele existente: {1}",
+ "targetFormatSettings": "Setări de format țintă",
+ "fileNameContainsDotDotDot": "Numele fișierului conține...",
+ "trackLanguageContainsDotDotDot": "Limba urmăririi conține...",
+ "batchConvertSettings": "Setări de conversie în lot",
+ "addFormatting": "Adăugați formatare",
+ "addItalic": "Adăugați cursive",
+ "addBold": "Adăugați bold",
+ "addUnderline": "Adăugați subliniere",
+ "addAlignment": "Adăugați alinierea",
+ "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",
+ "editStyles": "Editați stiluri",
+ "editProperties": "Editați proprietăți",
+ "editAttachments": "Editați atașamentele",
+ "errorsExportedX": "Erori exportate: {0}"
+ },
+ "changeCasing": {
+ "title": "Schimbați carcasa",
+ "fixNames": "Remediați numele",
+ "extraNames": "Nume suplimentare",
+ "enterExtraNamesHint": "Introduceți nume suplimentare de corectat, separate prin virgulă",
+ "onlyFixUppercaseLines": "Remediați numai linii mari",
+ "fixNamesOnly": "Remediați numai numele",
+ "allUppercase": "Toate majuscule",
+ "allLowercase": "Toate litere mici"
+ },
+ "changeFormatting": {
+ "title": "Schimbați formatarea"
+ },
+ "convertActors": {
+ "title": "Convertiți actorii",
+ "convertActorFrom": "Convertiți actorul din",
+ "convertActorTo": "Transformă actorul în",
+ "inlineActorViaX": "Actor inline prin {0}",
+ "setColor": "Setați culoarea",
+ "onlyNames": "Doar nume",
+ "numberOfConversionsX": "Număr de conversii: {0}"
+ },
+ "joinSubtitles": {
+ "title": "Alăturați-vă subtitrarilor",
+ "keepTimeCodes": "Păstrați codurile de timp",
+ "appendTimeCodes": "Adăugați coduri de timp",
+ "addMsAfterEachFile": "Adăugați milisecunde după fiecare fișier",
+ "join": "_Alăturați-vă"
+ },
+ "splitSubtitle": {
+ "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": {
+ "title": "Împărțiți/reechilibrați linii lungi",
+ "splitLongLines": "Împărțiți linii lungi (în mai multe linii)",
+ "rebalanceLongLines": "Reechilibrează liniile lungi",
+ "splitLongLine": "Linie lungă împărțită",
+ "rebalanceLongLine": "Reechilibrați linia lungă",
+ "splitIntoXLines": "Împărțit în {0} linii: „{1}” → „{2}...”",
+ "linesSplitX": "Liniile împărțite: {0}",
+ "linesSplitXLinesRebalancedY": "Linii împărțite: {0}, linii reechilibrate: {1}"
+ },
+ "mergeShortLines": {
+ "title": "Îmbinați linii scurte",
+ "highlightParts": "Evidențiați părți (karaoke)"
+ },
+ "mergeLinesWithSameText": {
+ "title": "Îmbina liniile cu același text",
+ "maxMsBetweenLines": "Max milisecunde între linii",
+ "includeIncrementingLines": "Includeți linii cu text în creștere"
+ },
+ "mergeLinesWithSameTimeCodes": {
+ "title": "Îmbina liniile cu aceleași coduri de timp",
+ "maxMsDifference": "Diferența maximă (milisecunde)",
+ "makeDialog": "Faceți dialoguri"
+ },
+ "netflixCheckAndFix": {
+ "title": "Netflix verifică și remediază erorile",
+ "generateReport": "Generați raport",
+ "nothingToReport": "Nu s-au găsit probleme.",
+ "saveNetflixQualityReport": "Salvați raportul de calitate Netflix",
+ "netflixReportSaved": "Raportul de calitate Netflix a fost salvat",
+ "netFlixQualityReportSavedToX": "Raport de calitate Netflix salvat pe:\n "
+ },
+ "imageBasedEdit": {
+ "editImagedBaseSubtitle": "Editați subtitrarea bazată pe imagini",
+ "editImagedBaseSubtitleX": "Editați subtitrarea bazată pe imagini: {0}",
+ "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",
+ "adjustBrightness": "Reglați luminozitatea",
+ "brightness": "Luminozitate",
+ "contrast": "Contrast",
+ "gamma": "Gamma",
+ "brightnessAdjustmentInfo": "Reglați glisoarele pentru a modifica luminozitatea, contrastul și gama.\n",
+ "resizeImages": "Redimensionați imaginile",
+ "percentage": "Procent",
+ "resizeImagesInfo": "Introduceți procentul de redimensionare a imaginilor.\n"
+ },
+ "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",
+ "brackets": "Paranteze",
+ "curlyBrackets": "Paranteze ondulate",
+ "parentheses": "Paranteze",
+ "and": "şi",
+ "onlySeparateLines": "Doar linii separate",
+ "removeTextBeforeColon": "Eliminați textul înainte de două puncte",
+ "onlyIfTextIsUppercase": "Doar dacă textul este cu majuscule",
+ "onlyOnSeparateLine": "Doar pe linie separată",
+ "ifLineIsUppercase": "Dacă linia este cu majuscule",
+ "ifLineContains": "Dacă linia conține",
+ "ifLineOnlyContainsMusicSymbols": "Dacă linia conține doar simboluri muzicale",
+ "removeInterjections": "Eliminați interjecțiile"
+ },
+ "pickAlignmentTitle": "Alegeți alinierea",
+ "pickFontNameTitle": "Alegeți numele fontului",
+ "colorPickerTitle": "Alege culoarea",
+ "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",
+ "pickLayerTitle": "Setați stratul",
+ "recentColors": "Culori recente"
+ },
+ "spellCheck": {
+ "spellCheck": "Verificare ortografică",
+ "getDictionariesTitle": "Verificare ortografică - obțineți dicționare",
+ "getDictionaryInstructions": "Alegeți limba și faceți clic pe descărcare",
+ "addNameToUserDictionary": "Adăugați numele în dicționarul utilizatorului",
+ "addNameToNamesList": "Adăugați un nume la lista de nume",
+ "noDictionariesFound": "Nu s-au găsit dicționare",
+ "wordNotFound": "Cuvântul nu a fost găsit",
+ "lineXofY": "Verificator ortografic - rândul {0} din {1}",
+ "changeWordFromXToY": "Schimbați cuvântul din „{0}” în „{1}”",
+ "changeAllWordsFromXToY": "Schimbați toate cuvintele din „{0}” în „{1}”",
+ "ignoreWordXOnce": "Ignorați cuvântul „{0}” o dată",
+ "ignoreWordXAlways": "Ignorați întotdeauna cuvântul „{0}”.",
+ "wordXAddedToNamesList": "Cuvântul „{0}” a fost adăugat la lista de nume",
+ "wordXAddedToUserDictionary": "Cuvântul „{0}” a fost adăugat în dicționarul utilizatorului",
+ "useSuggestionX": "Utilizați sugestia „{0}”",
+ "useSuggestionXAlways": "Folosiți întotdeauna sugestia „{0}”.",
+ "addXToUserDictionary": "Adăugați „{0}” la dicționarul utilizatorului",
+ "ignoreAllX": "Ignorați toate „{0}”",
+ "pickSpellCheckDictionaryDotDotDot": "Alegeți dicționarul de verificare ortografică...",
+ "chooseSpellCheckDictionary": "Alegeți dicționarul de verificare ortografică"
+ },
+ "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",
+ "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",
+ "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"
+ },
+ "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 :)"
+ },
+ "audioToText": {
+ "title": "Vorbire către text",
+ "transcribe": "Transcrie",
+ "translateToEnglish": "Traduceți în engleză",
+ "transcribing": "Se transcrie...",
+ "transcribingXOfY": "Se transcrie {0} din {1}...",
+ "inputLanguage": "Limba de intrare",
+ "advancedWhisperSettings": "Setări avansate pentru șoaptă",
+ "downloadingWhisperEngine": "Se descarcă motorul Whisper",
+ "enableVad": "Activați VAD",
+ "whisperXxlStandard": "Standard",
+ "whisperXxlStandardAsia": "Asia standard",
+ "whisperXxlSentence": "!!!>>> JSON.parse: unexpected character at line 1 column 1 of the JSON data <<>> JSON.parse: unexpected character at line 1 column 1 of the JSON data << Restaurar copia de seguridad automática...",
+ "ErrorLoadGZip": "Este archivo parece ser un archivo GZip comprimido.\n\nSubtitle Edit no puede abrir archivos comprimidos.",
+ "ErrorLoadJpg": "Este archivo parece ser una imagen JPG.\n\nSubtitle Edit no puede abrir archivos de imagen.",
+ "ErrorLoadPng": "Este archivo parece ser una imagen PNG.\n\nSubtitle Edit no puede abrir archivos de imagen.",
+ "ErrorLoadRar": "Este archivo parece ser un archivo Rar comprimido.\n\nSubtitle Edit no puede abrir archivos comprimidos.",
+ "ErrorLoadSrr": "Este archivo parece ser un archivo ReScene SRR.\n\nSubtitle Edit no puede abrir archivos SRR.",
+ "ErrorLoadTorrent": "Este archivo parece ser un archivo BitTorrent.\n\nSubtitle Edit no puede abrir archivos torrent.",
+ "ErrorLoadZip": "Este archivo parece ser un archivo ZIP comprimido.\n\nSubtitle Edit no puede abrir archivos comprimidos.",
+ "ExtractingWaveInfo": "Extrayendo info de onda...",
+ "ExtractingShotChanges": "Extrayendo cambios de plano...",
+ "FailedToExtractWaveInfo": "Error al extraer info de onda.",
+ "FixedRightToLeftUsingUnicodeControlCharactersX": "Corregido derecha a izquierda usando caracteres Unicode en {0} líneas",
+ "GeneratingSpectrogramDotDotDot": "Generando espectrograma...",
+ "GeneratingWaveformDotDotDot": "Generando forma de onda...",
+ "InsertEmptyTextAndShiftCellsDown": "Insertar texto vacío y desplazar celdas abajo",
+ "InsertTextFromSubtitleDotDotDot": "Insertar texto desde subtítulo...",
+ "CopyTextFromOriginalToCurrent": "Copiar texto del original al subtítulo actual",
+ "InsertedXTextsFromSubtitleY": "Insertados {0} textos del archivo de subtítulos \"{1}\"",
+ "ItalicHint": "Poner en cursiva líneas/texto seleccionados",
+ "JoinedSubtitleLoaded": "Subtítulo unido cargado",
+ "LineXTextAndTimingChanged": "Línea {0}: Texto y tiempos cambiados",
+ "LineXTextChangedFromYToZ": "Línea {0}: Texto cambiado de \"{1}\" a \"{2}\"",
+ "LineXTimingChanged": "Línea {0}: Tiempos cambiados",
+ "LoadingWaveInfoFromCache": "Cargando info de onda desde caché...",
+ "NoTextInClipboard": "No hay texto en el portapapeles",
+ "OneLineCopiedFromOriginal": "Una línea copiada del subtítulo original",
+ "OneLineMerged": "Una línea combinada",
+ "OneLineSwitched": "Una línea intercambiada",
+ "OverwriteExistingCells": "Sobrescribir celdas existentes",
+ "OverwriteOrShiftCellsDown": "Sobrescribir/desplazar celdas abajo",
+ "ParsingMatroskaFile": "Analizando archivo Matroska...",
+ "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",
+ "SaveXFileAs": "Guardar archivo {0} como",
+ "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}",
+ "SubtitleImportedFromMatroskaFile": "Subtítulo importado desde archivo Matroska",
+ "TextDown": "Texto abajo",
+ "TextOnly": "Solo texto",
+ "TextUp": "Texto arriba",
+ "TimeCodesOnly": "Solo códigos de tiempo",
+ "XPropertiesDotDotDot": "Propiedades de {0}...",
+ "TotalCharacters": "Total de caracteres: {0}",
+ "UnbreakHint": "Unir líneas seleccionadas",
+ "UndoPerformed": "Deshacer realizado",
+ "UndoPerformedXActionLeft": "Deshacer realizado (acciones restantes: {0})",
+ "XLinesCopiedFromOriginal": "{0} líneas copiadas del subtítulo original",
+ "XLinesMerged": "X líneas combinadas",
+ "XLinesSelectedOfY": "{0} líneas seleccionadas de {1}",
+ "XLinesSwitched": "{0} líneas intercambiadas",
+ "XShotChangedLoaded": "{0} cambios de plano cargados",
+ "YoutubeDlDownloadedSuccessfully": "\"yt-dlp\" descargado con éxito.",
+ "YoutubeDlNotInstalledDownloadNow": "\"yt-dlp\" no está instalado y es necesario para reproducir vídeos en línea.\n\n¿Descargar ahora?",
+ "InsertUnicodeSymbol": "Insertar símbolo Unicode",
+ "TrimmedXLines": "Recortadas {0} líneas de subtítulos",
+ "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?",
+ "VideoOpenedChangeLayoutQuestion": "Se ha abierto un archivo de vídeo.\n\n¿Deseas cambiar el diseño para mostrar el panel de vídeo?",
+ "SortedByStartTime": "Ordenado por tiempo de inicio",
+ "SortedByEndTime": "Ordenado por tiempo final",
+ "ColorHint": "Colorear líneas seleccionadas",
+ "RemoveFormattingHint": "Eliminar formato de las líneas seleccionadas",
+ "AssaResolutionResamplerDone": "Resolución ASSA cambiada.",
+ "LanguageFileSavedToX": "Archivo de idioma guardado en {0}",
+ "FileExportedInFormatXToY": "Archivo exportado en formato {0} a {1}",
+ "FileExportedInFormatXToFileY": "Archivo exportado en formato \"{0}\" al archivo \"{1}\"",
+ "FixedXLines": "Corregidas {0} líneas",
+ "TranscriptionCompletedWithXLines": "Transcripción completada con {0} líneas",
+ "ReplacedXOccurrences": "Reemplazadas {0} ocurrencias",
+ "FfmpegDownloadedAndInstalledToX": "ffmpeg descargado e instalado en {0}",
+ "NothingToSave": "Nada que guardar",
+ "NothingToSaveOriginal": "Nada que guardar (original)",
+ "LiveSpellCheckLanguageXLoaded": "Idioma de corrección en vivo {0} cargado",
+ "DownloadFfmpegTitle": "¿Descargar FFmpeg?",
+ "DownloadFfmpegQuestion": "FFmpeg es necesario para reproducir vídeos en línea y para algunas funciones de edición.\n\n¿Descargar FFmpeg ahora?",
+ "Menu": {
+ "File": "_Archivo",
+ "New": "_Nuevo",
+ "NewKeepVideo": "Nuevo (mantener _vídeo)",
+ "Open": "_Abrir...",
+ "OpenKeepVideo": "Abrir (_mantener vídeo)...",
+ "OpenOriginal": "Abrir ori_ginal...",
+ "CloseOriginal": "_Cerrar original",
+ "Reopen": "_Reabrir...",
+ "ClearRecentFiles": "_Limpiar archivos recientes",
+ "RestoreAutoBackup": "Restaurar copia de _seguridad automática...",
+ "Save": "_Guardar",
+ "SaveAs": "Guardar _como...",
+ "OpenContainingFolder": "Abrir _carpeta contenedora",
+ "Compare": "Com_parar...",
+ "Statistics": "E_stadísticas...",
+ "Import": "_Importar",
+ "Export": "_Exportar",
+ "Exit": "Sa_lir",
+ "Edit": "_Editar",
+ "Undo": "_Deshacer",
+ "Redo": "Re_hacer",
+ "ShowHistory": "_Mostrar historial para deshacer...",
+ "Find": "_Buscar...",
+ "FindNext": "Buscar _siguiente",
+ "Replace": "_Reemplazar...",
+ "MultipleReplace": "Reemplazo _múltiple...",
+ "GoToLineNumber": "_Ir al número de línea...",
+ "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...",
+ "BridgeGaps": "Unir _espacios...",
+ "ApplyMinGap": "Aplicar espacio mín. entre subtítulos...",
+ "ChangeCasing": "_Cambiar mayúsculas/minúsculas...",
+ "ChangeFormatting": "Cambiar formato...",
+ "FixCommonErrors": "Corregir errores _comunes...",
+ "CheckAndFixNetflixErrors": "Comprobar y corregir errores de Netfli_x...",
+ "MakeEmptyTranslationFromCurrentSubtitle": "Crear nueva traducción _vacía desde subtítulo actual",
+ "MergeLinesWithSameText": "_Combinar líneas con el mismo texto...",
+ "MergeLinesWithSameTimeCodes": "Combinar líneas con mismos códigos de tiempo...",
+ "SplitBreakLongLines": "Dividir/reequilibrar líneas largas...",
+ "MergeShortLines": "Combinar líneas cortas...",
+ "Renumber": "Renumerar...",
+ "RemoveTextForHearingImpaired": "_Eliminar texto para deficientes auditivos...",
+ "ConvertActors": "Convertir actores...",
+ "JoinSubtitles": "_Unir subtítulos...",
+ "SplitSubtitle": "_Dividir subtítulo...",
+ "AssaTools": "Herramientas _ASSA",
+ "AssaProgressBar": "Generar barra de _progreso...",
+ "AssaChangeResolution": "Cambiar _resolución...",
+ "AssaGenerateBackground": "Generar cajas de _fondo...",
+ "AssaApplyAdvancedEffects": "Aplicar efectos _avanzados...",
+ "AssaApplyCustomOverrideTags": "Aplicar etiquetas de _anulación...",
+ "AssaSetPosition": "Establecer _posición...",
+ "AssaImageColorPicker": "Selector de color de _imagen...",
+ "AssaDraw": "_Dibujar...",
+ "AssaStyles": "E_stilos...",
+ "AssaProperties": "P_ropiedades...",
+ "AssaAttachments": "_Adjuntos...",
+ "SpellCheckTitle": "Ortografía",
+ "SpellCheck": "_Corrector ortográfico...",
+ "FindDoubleWords": "_Buscar palabras dobles...",
+ "FindDoubleLines": "_Buscar líneas dobles...",
+ "AddNameToNamesList": "_Añadir nombre a la lista...",
+ "GetDictionaries": "_Obtener diccionarios...",
+ "Video": "_Vídeo",
+ "OpenVideo": "_Abrir vídeo...",
+ "OpenVideoFromUrl": "Abrir vídeo desde _URL...",
+ "CloseVideoFile": "_Cerrar archivo de vídeo",
+ "AudioTracks": "_Pistas de audio",
+ "SpeechToText": "_Voz a texto...",
+ "TextToSpeech": "_Texto a voz...",
+ "SetVideoOffset": "Establecer desfase de vídeo...",
+ "UpdateVideoOffsetX": "Actualizar desfase de vídeo desde {0}...",
+ "SmpteTiming": "Tiempos SMPTE (tasa fotogramas no entera)",
+ "GenerateBurnIn": "Generar vídeo con subtítulos _incrustados...",
+ "GenerateTransparent": "_Generar vídeo transparente con subtítulos...",
+ "GenerateImportShotChanges": "Generar/importar cambios de _plano...",
+ "ListShotChanges": "Listar cambios de p_lano...",
+ "UndockVideoControls": "_Desacoplar controles de vídeo",
+ "DockVideoControls": "_Acoplar controles de vídeo",
+ "Synchronization": "Si_ncronización",
+ "AdjustAllTimes": "_Ajustar todos los tiempos...",
+ "ChangeFrameRate": "Cambiar _tasa de fotogramas...",
+ "ChangeSpeed": "Cambiar _velocidad...",
+ "VisualSync": "Sincronización _visual...",
+ "Options": "_Opciones",
+ "Settings": "_Ajustes...",
+ "Shortcuts": "Atajos de _teclado...",
+ "WordLists": "_Listas de palabras...",
+ "ChooseLanguage": "_Elegir idioma de la interfaz...",
+ "Translate": "Tr_aducir",
+ "AutoTranslate": "Traducción _automática...",
+ "TranslateViaCopyPaste": "Auto-traducir mediante _copiar-pegar...",
+ "HelpTitle": "A_yuda",
+ "Help": "A_yuda...",
+ "About": "_Acerca de...",
+ "CheckForUpdates": "_Buscar actualizaciones...",
+ "FixRightToLeftViaUnicodeControlCharacters": "Corregir RTL mediante caracteres Unicode (líneas sel.)",
+ "RemoveUnicodeControlCharacters": "Eliminar caracteres de control Unicode (líneas sel.)",
+ "ReverseRightToLeftStartEnd": "Invertir inicio/fin RTL (líneas sel.)",
+ "PointSync": "Sincronización por _puntos...",
+ "PointSyncViaOther": "Sincronización por puntos mediante _otro subtítulo...",
+ "SortSubtitles": "_Ordenar subtítulos...",
+ "SetLayer": "Establecer capa...",
+ "FilterLayersForDisplayDotDotDot": "Filtrar capas para visualización..."
+ },
+ "Toolbar": {
+ "NewHint": "Iniciar un nuevo archivo de subtítulos {0}",
+ "OpenHint": "Abrir un archivo de subtítulos existente {0}",
+ "OpenVideoHint": "Abrir un archivo de vídeo {0}",
+ "SaveHint": "Guardar el subtítulo actual {0}",
+ "SaveAsHint": "Guardar subtítulo con un nombre nuevo {0}",
+ "FindHint": "Buscar texto en los subtítulos {0}",
+ "ReplaceHint": "Buscar y reemplazar texto {0}",
+ "SpellCheckHint": "Comprobar errores ortográficos {0}",
+ "FixCommonErrorsHint": "Corregir errores comunes de subtítulos {0}",
+ "SettingsHint": "Ajustar la configuración del programa {0}",
+ "LayoutHint": "Cambiar el diseño de los paneles {0}",
+ "HelpHint": "Abrir sitio web de ayuda {0}",
+ "AutoBreakHint": "Dividir automáticamente las líneas largas {0}",
+ "UnbreakHint": "Combinar subtítulos multilínea en una sola línea {0}",
+ "AssaStylesHint": "Estilos Advanced Sub Station Alpha",
+ "AssaPropertiesHint": "Propiedades Advanced Sub Station Alpha",
+ "AssaAttachmentsHint": "Adjuntos Advanced Sub Station Alpha",
+ "AssaDrawHint": "Dibujar formas Advanced Sub Station Alpha"
+ },
+ "Waveform": {
+ "PlayPauseHint": "Reproducir / Pausa {0}",
+ "PlayNextHint": "Reproducir siguiente {0}",
+ "PlaySelectionHint": "Reproducir selección {0}",
+ "SetStartAndOffsetTheRestHint": "Establecer inicio del subtítulo actual y desfasar el resto {0}",
+ "SetStartHint": "Establecer inicio del subtítulo actual {0}",
+ "SetEndHint": "Establecer fin del subtítulo actual {0}",
+ "NewHint": "Insertar nuevo subtítulo en la posición del vídeo {0}",
+ "CenterWaveformHint": "Centrar forma de onda en la posición del vídeo al reproducir {0}",
+ "ZoomHorizontalHint": "Zoom horizontal {0}",
+ "ZoomVerticalHint": "Zoom vertical {0}",
+ "SelectCurrentLineWhilePlayingHint": "Seleccionar subtítulo actual durante la reproducción {0}",
+ "VideoPosition": "Posición del vídeo {0}",
+ "HideWaveformToolbar": "Ocultar barra de herramientas {0}",
+ "ResetZoomAndSpeed": "Restablecer zoom y velocidad de reproducción {0}",
+ "RemoveBlankLines": "Eliminar líneas en blanco {0}",
+ "PlaySelectedRepeatHint": "Reproducir subtítulo(s) seleccionados en modo repetición {0}"
+ }
+ },
+ "File": {
+ "Compare": "Comparar",
+ "PreviousDifference": "Diferencia anterior",
+ "NextDifference": "Diferencia siguiente",
+ "SubtitlesNotAlike": "Los subtítulos no tienen similitudes",
+ "XNumberOfDifference": "Número de diferencias: {0}",
+ "XNumberOfDifferenceAndPercentChanged": "Diferencias: {0} ({1:0.##}% de palabras cambiadas)",
+ "XNumberOfDifferenceAndPercentLettersChanged": "Diferencias: {0} ({1:0.##}% de letras cambiadas)",
+ "ShowOnlyDifferences": "Solo diferencias",
+ "IgnoreLineBreaks": "Ignorar saltos de línea",
+ "IgnoreWhitespace": "Ignorar espacios en blanco",
+ "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",
+ "ShowOnlyDifferencesInText": "Solo diferencias en texto",
+ "LoadXFromFile": "Cargar \"{0}\" desde archivo",
+ "SaveCompareHtmlTitle": "Guardar archivo HTML de comparación",
+ "PickMatroskaTrackX": "Elegir pista Matroska - {0}",
+ "RosettaProperties": "Propiedades Timed Text Rosetta IMSC",
+ "RosettaFontSize": "Tamaño de fuente (altura de fila)",
+ "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",
+ "OriginalEpisodeTitle": "Título original del episodio",
+ "TranslatedProgramTitle": "Título traducido del programa",
+ "TranslatedEpisodeTitle": "Título traducido del episodio",
+ "TranslatorsName": "Nombre del traductor",
+ "SubtitleListReferenceCode": "Código de referencia de la lista",
+ "CountryOfOrigin": "País de origen",
+ "TimeCodeStatus": "Estado del código de tiempo",
+ "TimeCodeStartOfProgramme": "Código de tiempo: Inicio del programa",
+ "RevisionNumber": "Número de revisión",
+ "MaxNoOfDisplayableChars": "Máx. caracteres por fila",
+ "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",
+ "MarginTop": "Margen superior (alineación superior)",
+ "MarginBottom": "Margen inferior (alineación inferior)",
+ "NewLineRows": "Líneas añadidas por un salto de línea",
+ "Teletext": "Teletexto",
+ "UseBox": "Usar caja alrededor del texto",
+ "DoubleHeight": "Usar doble altura para el texto",
+ "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",
+ "DiscSequenceNumber": "Número de secuencia del disco"
+ },
+ "Import": {
+ "ImportTimeCodes": "Importar códigos de tiempo...",
+ "PlainTextDotDotDot": "Texto plano...",
+ "TitleImportPlainText": "Importar texto plano",
+ "ImagesForOcrDotDotDot": "Imágenes para OCR...",
+ "TimeCodesDotDotDot": "Códigos de tiempo...",
+ "SubtitleWithManuallyChosenEncodingDotDotDot": "_Subtítulo con codificación manual...",
+ "TitleImportImages": "Importar imágenes",
+ "ImportFileLabel": "Elegir imágenes a importar (códigos de tiempo en el nombre)",
+ "ImportFilesInfo": "Usar nombres con código de tiempo:\r\ninicio_HH_MM_SS_MMM__fin_HH_MM_SS_MMM[_índice].ext\r\n\r\nEjemplos:\r\n0_00_01_042__0_00_03_919_0001.png\r\n0_00_01_042__0_00_03_919.png\r\n\r\nReglas:\r\n• HH_MM_SS_MMM para tiempos de inicio y fin\r\n• El guion bajo doble separa inicio/fin\r\n• Índice opcional tras el tiempo final",
+ "FormattingDotDotDot": "Formato...",
+ "ImagedBasedSubtitleForEditDotDotDot": "Subtítulo basado en imagen para editar...",
+ "ImagedBasedSubtitleForOcrDotDotDot": "Subtítulo basado en imagen para OCR...",
+ "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}",
+ "GapMs": "Espacio (ms)",
+ "UseFixedDuration": "Usar duración fija",
+ "FixedDurationMs": "Duración fija (ms)",
+ "AlignViaWhisper": "Alinear códigos de tiempo mediante Whisper..."
+ },
+ "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.",
+ "PreviewTitle": "Previsualización - tamaño actual: {0}x{1}, destino: {2}x{3}, zoom: {4}%",
+ "TitleExportVobSub": "VobSub (sub/idx)",
+ "CustomTextFormatsDotDotDot": "_Formatos de texto personalizados...",
+ "PlainTextDotDotDot": "_Texto plano...",
+ "CustomTextFormats": "Formatos de texto personalizados",
+ "TitleExportCustomFormat": "Exportar formato de texto personalizado",
+ "EditCustomFormat": "Editar formato de texto personalizado",
+ "NewCustomFormat": "Nuevo formato de texto personalizado",
+ "DeleteSelectedCustomTextFormatX": "¿Eliminar el formato personalizado \"{0}\"?",
+ "TimeCodeFormat": "Formato de código de tiempo",
+ "NewLineFormat": "Formato de nueva línea",
+ "PleaseEnterNameForTheCustomFormat": "Introduzca un nombre para el formato personalizado",
+ "TitleExportPlainText": "Exportar texto plano",
+ "LineNumbers": "Números de línea",
+ "ShowLineNumbers": "Mostrar números de línea",
+ "AddNewLineAfterLineNumber": "Añadir nueva línea tras el número de línea",
+ "AddNewLineAfterTimeCode": "Añadir nueva línea tras el código de tiempo",
+ "AddNewLineAfterText": "Añadir nueva línea tras el texto",
+ "AddLineBetweenSubtitles": "Añadir línea entre subtítulos",
+ "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)"
+ },
+ "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}",
+ "TotalCharsPerSecond": "Total de caracteres/segundo: {0:0.0} segundos",
+ "TotalWords": "Total de palabras: {0:#,##0}",
+ "NumberOfItalicTags": "Etiquetas de cursiva: {0:#,##0}",
+ "NumberOfBoldTags": "Etiquetas de negrita: {0:#,##0}",
+ "NumberOfUnderlineTags": "Etiquetas de subrayado: {0:#,##0}",
+ "NumberOfFontTags": "Etiquetas de fuente: {0:#,##0}",
+ "NumberOfAlignmentTags": "Etiquetas de alineación: {0:#,##0}",
+ "LineLengthMinimum": "Longitud de subtítulo - mínima: {0}",
+ "LineLengthMaximum": "Longitud de subtítulo - máxima: {0}",
+ "LineLengthAverage": "Longitud de subtítulo - media: {0:#.###}",
+ "LinesPerSubtitleAverage": "Líneas por subtítulo - media: {0:0.###}",
+ "SingleLineLengthMinimum": "Longitud de línea única - mínima: {0}",
+ "SingleLineLengthMaximum": "Longitud de línea única - máxima: {0}",
+ "SingleLineLengthAverage": "Longitud de línea única - media: {0:#.###}",
+ "SingleLineLengthExceedingMaximum": "Línea única - exceden máx. ({0} car.): {1} ({2:0.00}%)",
+ "SingleLineWidthMinimum": "Ancho de línea única - mínimo: {0} píxeles",
+ "SingleLineWidthMaximum": "Ancho de línea única - máximo: {0} píxeles",
+ "SingleLineWidthAverage": "Ancho de línea única - medio: {0:#.###} píxeles",
+ "SingleLineWidthExceedingMaximum": "Ancho de línea única - exceden máx. ({0} px): {1} ({2:0.00}%)",
+ "DurationMinimum": "Duración - mínima: {0:0.000} segundos",
+ "DurationMaximum": "Duración - máxima: {0:0.000} segundos",
+ "DurationAverage": "Duración - media: {0:0.000} segundos",
+ "DurationExceedingMinimum": "Duración - bajo el mín. ({0:0.###} s): {1} ({2:0.00}%)",
+ "DurationExceedingMaximum": "Duración - exceden el máx. ({0:0.###} s): {1} ({2:0.00}%)",
+ "CharactersPerSecondMinimum": "Caracteres/seg - mínimo: {0:0.000}",
+ "CharactersPerSecondMaximum": "Caracteres/seg - máximo: {0:0.000}",
+ "CharactersPerSecondAverage": "Caracteres/seg - media: {0:0.000}",
+ "CharactersPerSecondExceedingOptimal": "Caracteres/seg - exceden óptimo ({0:0.##} cps): {1} ({2:0.00}%)",
+ "CharactersPerSecondExceedingMaximum": "Caracteres/seg - exceden máximo ({0:0.##} cps): {1} ({2:0.00}%)",
+ "WordsPerMinuteMinimum": "Palabras/min - mínimo: {0:0.000}",
+ "WordsPerMinuteMaximum": "Palabras/min - máximo: {0:0.000}",
+ "WordsPerMinuteAverage": "Palabras/min - media: {0:0.000}",
+ "WordsPerMinuteExceedingMaximum": "Palabras/min - exceden el máximo ({0} wpm): {1} ({2:0.00}%)",
+ "GapMinimum": "Espacio - mínimo: {0:#,##0} ms",
+ "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..."
+ },
+ "ManualChosenEncoding": {
+ "Title": "Importar subtítulo con codificación manual",
+ "SearchEncodings": "Buscar codificaciones",
+ "CodePage": "Página de códigos"
+ },
+ "RestoreAutoBackup": {
+ "Title": "Restaurar copia de seguridad automática",
+ "OpenAutoBackupFolder": "Abrir carpeta de copias de seguridad",
+ "RestoreAutoBackupFile": "Restaurar archivo de copia de seguridad",
+ "DeleteAllSubtitleBackups": "¿Desea eliminar todos los archivos de copia de seguridad?",
+ "DeleteAll": "Eliminar todo"
+ },
+ "PropertiesDCinema": {
+ "Title": "Propiedades D-Cinema SMPTE",
+ "GenerateIdAuto": "Generar nuevo ID al guardar",
+ "SubtitleId": "ID de subtítulo",
+ "GenerateId": "Generar ID",
+ "MovieTitle": "Título de la película",
+ "ReelNumber": "Número de rollo",
+ "IssueDate": "Fecha de emisión",
+ "Now": "Ahora",
+ "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",
+ "Export": "Exportar..."
+ }
+ },
+ "Edit": {
+ "ShowHistory": "Historial para deshacer",
+ "RestoreSelected": "Restaurar seleccionado",
+ "ModifySelection": {
+ "Title": "Modificar selección",
+ "Contains": "Contiene",
+ "StartsWith": "Empieza por",
+ "EndsWith": "Termina por",
+ "NotContains": "No contiene",
+ "AllUppercase": "Todo en mayúsculas",
+ "Odd": "Número impar",
+ "Even": "Número par",
+ "DurationLessThan": "Duración en ms <",
+ "DurationGreaterThan": "Duración en ms >",
+ "CpsLessThan": "CPS <",
+ "CpsGreaterThan": "CPS >",
+ "LengthLessThan": "Longitud <",
+ "LengthGreaterThan": "Longitud >",
+ "PixelLengthGreaterThan": "Longitud en píxeles >",
+ "GapLessThan": "Espacio en ms <",
+ "GapGreaterThan": "Espacio en ms >",
+ "ExactlyOneLine": "Exactamente una línea",
+ "ExactlyTwoLines": "Exactamente dos líneas",
+ "MoreThanTwoLines": "Más de dos líneas",
+ "Bookmarked": "Marcado",
+ "BookmarkContains": "Marcador contiene",
+ "BlankLines": "Líneas en blanco",
+ "SelectionNew": "Nueva selección",
+ "SelectionAdd": "Añadir a la selección",
+ "SelectionSubtract": "Restar de la selección",
+ "SelectionIntersect": "Intersección con la selección"
+ },
+ "MultipleReplace": {
+ "Title": "Reemplazo múltiple",
+ "EditRule": "Editar regla",
+ "NewRule": "Nueva regla",
+ "EditCategory": "Editar categoría",
+ "NewCategory": "Nueva categoría",
+ "CategoryName": "Nombre de la categoría",
+ "ExportReplaceRules": "Exportar reglas",
+ "AppliedRules": "Reglas aplicadas",
+ "FindRule": "Buscar regla",
+ "XLinesAffected": "{0:#,##0} líneas afectadas",
+ "DeleteCategoryConfirm": "¿Eliminar categoría '{0}'?",
+ "DeleteRuleConfirm": "¿Eliminar regla '{0}'?",
+ "FindWhat": "Buscar",
+ "DescriptionOptional": "Descripción (opcional)"
+ },
+ "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..."
+ }
+ },
+ "Tools": {
+ "PickAlignmentTitle": "Elegir alineación",
+ "PickFontNameTitle": "Elegir nombre de fuente",
+ "ColorPickerTitle": "Elegir color",
+ "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",
+ "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",
+ "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",
+ "RemovedEmptyLineInMiddle": "Eliminar línea vacía en medio",
+ "RemovedEmptyLinesUnusedLineBreaks": "Eliminar líneas vacías/saltos no usados",
+ "FixOverlappingDisplayTimes": "Corregir tiempos superpuestos",
+ "FixShortDisplayTimes": "Corregir tiempos cortos",
+ "FixLongDisplayTimes": "Corregir tiempos largos",
+ "FixShortGaps": "Corregir espacios cortos",
+ "FixInvalidItalicTags": "Corregir etiquetas de cursiva inválidas",
+ "RemoveUnneededSpaces": "Eliminar espacios innecesarios",
+ "RemoveUnneededPeriods": "Eliminar puntos innecesarios",
+ "FixCommas": "Corregir comas",
+ "FixMissingSpaces": "Corregir espacios faltantes",
+ "BreakLongLines": "Dividir líneas largas",
+ "RemoveLineBreaks": "Eliminar saltos en textos cortos (una frase)",
+ "RemoveLineBreaksAll": "Eliminar saltos en textos cortos (todo menos diálogos)",
+ "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 (\")",
+ "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",
+ "NormalizeStrings": "Normalizar cadenas",
+ "FixTurkishAnsi": "Corregir letras ANSI turcas a Unicode",
+ "FixDanishLetterI": "Corregir letra danesa 'i'",
+ "FixSpanishInvertedQuestionAndExclamationMarks": "Corregir signos de interrogación y exclamación invertidos",
+ "AddMissingQuote": "Añadir comilla faltante (\")",
+ "AddMissingQuotes": "Añadir comillas faltantes (\")",
+ "RemoveHyphensSingleLine": "Eliminar guiones de diálogo en líneas únicas",
+ "FixHyphensInDialogs": "Corregir guion en diálogos vía estilo: {0}",
+ "AddMissingQuotesExample": "¿Cómo estás? -> \"¿Cómo estás?\"",
+ "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}",
+ "NothingFixableBut": "Nada pudo corregirse automáticamente. El subtítulo tiene errores; ver registro.",
+ "XFixedBut": "{0} problema(s) corregido(s) pero aún hay errores; ver registro.",
+ "XCouldBeFixedBut": "{0} problema(s) podrían corregirse pero aún habrá errores; ver registro.",
+ "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",
+ "FixShortDisplayTime": "Corregir tiempo corto",
+ "FixOverlappingDisplayTime": "Corregir tiempo superpuesto",
+ "FixShortGap": "Corregir espacio corto",
+ "FixInvalidItalicTagsExample": "Qué me importa. -> Qué me importa.",
+ "RemoveUnneededSpacesExample": "Oye tú ; ahí. -> Oye tú; ahí.",
+ "RemoveUnneededPeriodsExample": "¡Oye tú!. -> ¡Oye tú!",
+ "FixMissingSpacesExample": "Oye.Tú. -> Oye. Tú.",
+ "FixUppercaseIInsideLowercaseWordsExample": "La tierra es pIana. -> La tierra es plana.",
+ "FixLowercaseIToUppercaseIExample": "Qué me importa i. -> Qué me importa I.",
+ "StartTimeLaterThanEndTime": "Texto {0}: El inicio es posterior al fin: {4}{1} -> {2} {3}",
+ "UnableToFixStartTimeLaterThanEndTime": "No se puede corregir texto {0}: Inicio posterior al fin: {1}",
+ "XFixedToYZ": "{0} corregido a: {1}{2}",
+ "UnableToFixTextXY": "No se puede corregir texto {0}: {1}",
+ "UnneededSpace": "Espacio innecesario",
+ "UnneededPeriod": "Punto innecesario",
+ "FixMissingSpace": "Corregir espacio faltante",
+ "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 '--' -> '...'",
+ "FixDoubleGreaterThan": "Eliminar '>>'",
+ "FixEllipsesStart": "Eliminar '...' iniciales",
+ "FixMissingOpenBracket": "Corregir [ o ( faltantes",
+ "FixMusicNotation": "Reemplazar símbolos musicales por el preferido",
+ "FixDoubleDashExample": "'Vaya-- um sí!' -> 'Vaya... um sí!'",
+ "FixDoubleGreaterThanExample": "'>> Robert: ¡Qué pasa!' -> 'Robert: ¡Qué pasa!'",
+ "FixEllipsesStartExample": "'... y entonces' -> 'y entonces'",
+ "FixMissingOpenBracketExample": "golpe] ¡Cuidado!' -> '[golpe] ¡Cuidado!'",
+ "FixMusicNotationExample": "'âTª dulces sueños' -> '♫ dulces sueños'",
+ "NumberOfImportantLogMessages": "¡{0} mensajes importantes en el registro!",
+ "FixedOkXY": "Corregido y OK - '{0}': {1}",
+ "FixOcrErrorExample": "N0 -> No",
+ "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",
+ "FixCommonOcrErrorsStep1": "Corregir errores, paso 1 (elegir)",
+ "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",
+ "ApplySelectedFixes": "Aplicar correcciones seleccionadas"
+ },
+ "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)"
+ },
+ "ApplyDurationLimits": {
+ "Title": "Aplicar límites de duración",
+ "FixMinDurationMs": "Corregir duración mínima (ms)",
+ "DoNotGoPastShotChange": "No pasar del cambio de plano",
+ "FixMaxDurationMs": "Corregir duración máxima (ms)",
+ "MaxDurationShouldBeHigherThanMinDuration": "La duración máxima debe ser mayor que la mínima",
+ "ChangedDurationFromXToYCommentZ": "Cambiada duración de {0} a {1} {2}",
+ "OnlyPartialFixed": "(solo corrección parcial)",
+ "UnfixableX": "Incorregible: {0}",
+ "FixedX": "Corregido: {0}",
+ "FixedXImprovedY": "Correcciones: {0}, Mejoras: {1}",
+ "NoChangesNeeded": "Sin cambios necesarios"
+ },
+ "ApplyMinGaps": {
+ "Title": "Aplicar espacios mínimos entre subtítulos",
+ "NumberOfGapsFixedX": "Espacios mínimos aplicados: {0}",
+ "MinFramesBetweenLines": "Mínimo de fotogramas entre líneas",
+ "MinMsBetweenLines": "Mínimo de milisegundos entre líneas",
+ "ChangedGapFromXToYCommentZ": "Cambiado espacio de {0} a {1} {2}"
+ },
+ "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"
+ },
+ "BridgeGaps": {
+ "Title": "Unir espacios",
+ "BridgeGapsSmallerThan": "Unir espacios menores de (ms)",
+ "MinGap": "Espacio mínimo (ms)",
+ "NumberOfSmallGapsBridgedX": "Número de espacios pequeños unidos: {0}",
+ "PercentFoPrevious": "Espacio para el anterior (%)",
+ "GapChange": "Cambio de espacio"
+ },
+ "Renumber": {
+ "Title": "Renumerar",
+ "StartFromNumber": "Empezar por el número:"
+ },
+ "SortBy": {
+ "Title": "Ordenar subtítulos",
+ "SortOrder": "Orden"
+ },
+ "BatchConvert": {
+ "Title": "Conversión por lotes",
+ "OneActionsSelected": "Una acción seleccionada",
+ "XActionsSelected": "{0} acciones seleccionadas",
+ "OutputFolderSource": " Carpeta de salida: Carpeta de origen",
+ "OutputFolderX": " Carpeta de salida: {0}",
+ "EncodingXOverwriteY": "Codificación: {0}, sobrescribir archivos: {1}",
+ "TargetFormatSettings": "Ajustes del formato de destino",
+ "FileNameContainsDotDotDot": "El nombre contiene...",
+ "TrackLanguageContainsDotDotDot": "El idioma de pista contiene...",
+ "BatchConvertSettings": "Ajustes de conversión por lotes",
+ "AddFormatting": "Añadir formato",
+ "AddItalic": "Añadir cursiva",
+ "AddBold": "Añadir negrita",
+ "AddUnderline": "Añadir subrayado",
+ "AddAlignment": "Añadir alineación",
+ "AddColor": "Añadir color",
+ "DeleteLinesWithSpecificActorsOrStyles": "Eliminar líneas con actores o estilos (separados por coma)",
+ "UseSourceStylesIfPossible": "Usar estilos de origen si es posible",
+ "EditStyles": "Editar estilos",
+ "EditProperties": "Editar propiedades",
+ "EditAttachments": "Editar adjuntos",
+ "ErrorsExportedX": "Errores exportados: {0}",
+ "SlowFontSizeChange": "Cambio de tamaño de fuente lento",
+ "IncreaseFontKerning": "Aumentar el interletraje de fuente",
+ "ScrollUp": "Desplazarse hacia arriba",
+ "ScrollDown": "Desplácese hacia abajo",
+ "RotateIn": "Girar hacia dentro",
+ "TiltBounce": "Rebote de inclinación",
+ "FontSizeBounceIn": "El tamaño de fuente rebota"
+ },
+ "ChangeCasing": {
+ "Title": "Cambiar mayúsculas/minúsculas",
+ "FixNames": "Corregir nombres",
+ "ExtraNames": "Nombres extra",
+ "EnterExtraNamesHint": "Introduzca nombres extra a corregir, separados por comas",
+ "OnlyFixUppercaseLines": "Solo corregir líneas en mayúsculas",
+ "FixNamesOnly": "Corregir solo nombres",
+ "AllUppercase": "Todo en mayúsculas",
+ "AllLowercase": "Todo en minúsculas"
+ },
+ "ChangeFormatting": {
+ "Title": "Cambiar formato"
+ },
+ "ConvertActors": {
+ "Title": "Convertir actores",
+ "ConvertActorFrom": "Convertir actor de",
+ "ConvertActorTo": "Convertir actor a",
+ "InlineActorViaX": "Actor en línea mediante {0}",
+ "SetColor": "Establecer color",
+ "OnlyNames": "Solo nombres",
+ "NumberOfConversionsX": "Número de conversiones: {0}"
+ },
+ "JoinSubtitles": {
+ "Title": "Unir subtítulos",
+ "KeepTimeCodes": "Mantener códigos de tiempo",
+ "AppendTimeCodes": "Anexar códigos de tiempo",
+ "AddMsAfterEachFile": "Añadir milisegundos tras cada archivo",
+ "Join": "_Unir"
+ },
+ "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": {
+ "Title": "Dividir/reequilibrar líneas largas",
+ "SplitLongLines": "Dividir líneas largas (en varias líneas)",
+ "RebalanceLongLines": "Reequilibrar líneas largas",
+ "SplitLongLine": "Dividir línea larga",
+ "RebalanceLongLine": "Reequilibrar línea larga",
+ "SplitIntoXLines": "Dividir en {0} líneas: '{1}' → '{2}...'",
+ "LinesSplitX": "Líneas divididas: {0}",
+ "LinesSplitXLinesRebalancedY": "Líneas divididas: {0}, líneas reequilibradas: {1}"
+ },
+ "MergeShortLines": {
+ "Title": "Combinar líneas cortas",
+ "HighlightParts": "Resaltar partes (karaoke)",
+ "MergedLineInfo": "Línea fusionada {0} en {1} - {2}",
+ "LinesMergedX": "Líneas fusionadas: {0}"
+ },
+ "MergeLinesWithSameText": {
+ "Title": "Combinar líneas con el mismo texto",
+ "MaxMsBetweenLines": "Máximo de milisegundos entre líneas",
+ "IncludeIncrementingLines": "Incluir líneas con texto incremental"
+ },
+ "MergeLinesWithSameTimeCodes": {
+ "Title": "Combinar líneas con mismos códigos de tiempo",
+ "MaxMsDifference": "Diferencia máx. (milisegundos)",
+ "MakeDialog": "Crear diálogos"
+ },
+ "NetflixCheckAndFix": {
+ "Title": "Comprobar y corregir errores de Netflix",
+ "GenerateReport": "Generar informe",
+ "NothingToReport": "No se encontraron problemas.",
+ "SaveNetflixQualityReport": "Guardar informe de calidad de Netflix",
+ "NetflixReportSaved": "Informe de calidad de Netflix guardado",
+ "NetFlixQualityReportSavedToX": "Informe de calidad de Netflix guardado en:\n {0}",
+ "DialogHyphenSpace": "Espacio de guión de diálogo",
+ "EllipsesNotThreeDots": "Utilice puntos suspensivos (no tres puntos)",
+ "OnlyAllowedGlyphs": "Sólo glifos permitidos",
+ "Italics": "Cursiva",
+ "MaxCharsSec": "Máximo de caracteres/seg.",
+ "MaxDuration": "Duración máxima",
+ "MaxLineLength": "Longitud máxima de línea",
+ "MinDuration": "Duración mínima",
+ "MaxNumberOfLines": "Número máximo de líneas",
+ "OneToTenSpellOut": "De uno a diez deletrear",
+ "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"
+ },
+ "ImageBasedEdit": {
+ "EditImagedBaseSubtitle": "Editar subtítulo basado en imagen",
+ "EditImagedBaseSubtitleX": "Editar subtítulo basado en imagen: {0}",
+ "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",
+ "ResetToDefaults": "Restablecer predeterminados",
+ "AlphaAdjustmentInfo": "Ajuste alfa: Añadir/restar del canal alfa.\nLa vista previa se actualiza automáticamente con fondo de cuadros para visualizar la transparencia.",
+ "AdjustBrightness": "Ajustar brillo",
+ "Brightness": "Brillo",
+ "Contrast": "Contraste",
+ "Gamma": "Gamma",
+ "BrightnessAdjustmentInfo": "Mueve los deslizadores para modificar brillo, contraste y gamma.\nLa vista previa se actualiza automáticamente con el primer subtítulo seleccionado.",
+ "ResizeImages": "Redimensionar imágenes",
+ "Percentage": "Porcentaje",
+ "ResizeImagesInfo": "Introduzca el porcentaje para redimensionar.\nLa vista previa se actualizará automáticamente."
+ },
+ "RemoveTextForHearingImpaired": {
+ "Title": "Eliminar texto para deficientes auditivos",
+ "Interjections": "Interjecciones",
+ "SkipIfStartWith": "Omitir si empieza por",
+ "RemoveTextBetween": "Eliminar texto entre",
+ "Brackets": "Corchetes",
+ "CurlyBrackets": "Llaves",
+ "Parentheses": "Paréntesis",
+ "And": "y",
+ "OnlySeparateLines": "Solo líneas separadas",
+ "RemoveTextBeforeColon": "Eliminar texto antes de los dos puntos",
+ "OnlyIfTextIsUppercase": "Solo si el texto está en mayúsculas",
+ "OnlyOnSeparateLine": "Solo en línea separada",
+ "IfLineIsUppercase": "Si la línea está en mayúsculas",
+ "IfLineContains": "Si la línea contiene",
+ "IfLineOnlyContainsMusicSymbols": "Si la línea solo contiene símbolos musicales",
+ "RemoveInterjections": "Eliminar interjecciones"
+ }
+ },
+ "SpellCheck": {
+ "SpellCheck": "Ortografía",
+ "GetDictionariesTitle": "Ortografía - Obtener diccionarios",
+ "GetDictionaryInstructions": "Elegir idioma y pulsar descargar",
+ "AddNameToUserDictionary": "Añadir nombre al diccionario de usuario",
+ "AddNameToNamesList": "Añadir nombre a la lista de nombres",
+ "NoDictionariesFound": "No se encontraron diccionarios",
+ "WordNotFound": "Palabra no encontrada",
+ "LineXofY": "Corrector - línea {0} de {1}",
+ "ChangeWordFromXToY": "Cambiar palabra de '{0}' a '{1}'",
+ "ChangeAllWordsFromXToY": "Cambiar todas de '{0}' a '{1}'",
+ "IgnoreWordXOnce": "Ignorar '{0}' una vez",
+ "IgnoreWordXAlways": "Ignorar '{0}' siempre",
+ "WordXAddedToNamesList": "Palabra '{0}' añadida a la lista de nombres",
+ "WordXAddedToUserDictionary": "Palabra '{0}' añadida al diccionario de usuario",
+ "UseSuggestionX": "Usar sugerencia '{0}'",
+ "UseSuggestionXAlways": "Usar sugerencia '{0}' siempre",
+ "AddXToUserDictionary": "Añadir '{0}' al diccionario de usuario",
+ "IgnoreAllX": "Ignorar todas las '{0}'",
+ "PickSpellCheckDictionaryDotDotDot": "Elegir diccionario ortográfico...",
+ "ChooseSpellCheckDictionary": "Elegir diccionario ortográfico"
+ },
+ "Video": {
+ "GoToVideoPosition": "Ir a la posición del vídeo",
+ "GenerateBlankVideoDotDotDot": "Generar vídeo en blanco...",
+ "GenerateBlankVideoTitle": "Generar vídeo en blanco",
+ "ReEncodeVideoForBetterSubtitlingTitle": "Recodificar vídeo para mejor subtitulado",
+ "ReEncodeVideoForBetterSubtitlingDotDotDot": "Recodificar vídeo para mejor subtitulado...",
+ "OpenSecondarySubtitleOnVideoPlayerDotDotDot": "Subtítulo secundario en reproductor, abrir...",
+ "OpenSecondarySubtitleOnVideoPlayer": "Subtítulo secundario (en reproductor)",
+ "RemoveSecondarySubtitleOnVideoPlayer": "Subtítulo secundario en reproductor, quitar",
+ "CutVideoTitle": "Cortar vídeo",
+ "CutVideoDotDotDot": "Cortar vídeo...",
+ "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)",
+ "ImportCurrentSubtitle": "Importar subtítulo actual",
+ "AddRemoveEmbeddedSubtitlesTitle": "Añadir/quitar subtítulos incrustados",
+ "AddCurrentSubtitle": "Añadir subtítulo actual",
+ "TitleOrLanguage": "Título/idioma",
+ "ViewMatroskaTrackX": "Ver pista Matroska - {0}",
+ "ResolutionSeparator": "x",
+ "OpenFromUrlTitle": "Abrir archivo de vídeo desde URL",
+ "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",
+ "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",
+ "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."
+ },
+ "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! :)"
+ },
+ "AudioToText": {
+ "Title": "Voz a texto",
+ "Transcribe": "Transcribir",
+ "TranslateToEnglish": "Traducir al inglés",
+ "Transcribing": "Transcribiendo...",
+ "TranscribingXOfY": "Transcribiendo {0} de {1}...",
+ "InputLanguage": "Idioma de entrada",
+ "AdvancedWhisperSettings": "Ajustes avanzados de Whisper",
+ "DownloadingWhisperEngine": "Descargando motor Whisper",
+ "EnableVad": "Habilitar VAD",
+ "WhisperXxlStandard": "Estándar",
+ "WhisperXxlStandardAsia": "Estándar Asia",
+ "WhisperXxlSentence": "Nivel frase",
+ "WhisperXxlSingleWords": "Palabras individuales",
+ "WhisperXxlHighlightWord": "Resaltar palabra",
+ "SelectModel": "Seleccionar modelo",
+ "ViewWhisperLogFile": "Ver registro de Whisper",
+ "ReDownloadX": "Volver a descargar {0}",
+ "DownloadingSpeechToTextModel": "Descargando modelo de voz a texto",
+ "WhisperPostProcessingTitle": "Post-procesamiento de Whisper",
+ "AdjustTimings": "Ajustar tiempos",
+ "MergeShortLines": "Combinar líneas cortas",
+ "BreakSplitLongLines": "Dividir líneas largas",
+ "FixShortDuration": "Corregir duración corta",
+ "FixCasing": "Corregir mayúsculas",
+ "AddPeriods": "Añadir puntos",
+ "ChangeUnderlineToColor": "Cambiar subrayado por color"
+ },
+ "TextToSpeech": {
+ "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",
+ "VoiceSettings": "TTS - Ajustes de voz",
+ "VoiceSampleText": "Texto de muestra de voz",
+ "RefreshVoices": "Actualizar voces",
+ "VideoEncodingSettings": "TTS - Ajustes de codificación de vídeo",
+ "ElevenLabsSettings": "TTS - Ajustes de ElevenLabs",
+ "ElevenLabsSettingsResetHint": "Restablecer ElevenLabs a valores predeterminados",
+ "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...",
+ "VoiceImportSuccessTitle": "Voz importada",
+ "VoiceXImported": "Voz '{0}' importada con éxito",
+ "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.",
+ "AudioDucking": "Atenuación de audio (ducking)",
+ "AudioDuckingDescription": "Reduce el volumen del vídeo original para mezclarlo con el TTS.",
+ "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.",
+ "MaxSilenceMs": "Silencio máx. (ms)",
+ "HighQualityTimeStretch": "Cambio de tiempo de alta calidad (WSOLA/rubberband)",
+ "HighQualityTimeStretchDescription": "Usa el algoritmo rubberband para cambios de velocidad preservando el tono. Requiere librubberband.",
+ "SilencePaddingMs": "Relleno de silencio (ms)",
+ "SilencePaddingMsDescription": "Añade un breve silencio al final de cada segmento. Útil para dar aire entre frases.",
+ "OutputSampleRate": "Tasa de muestreo de salida (0 = predet.)",
+ "OutputSampleRateDescription": "Remuestrea todos los segmentos a la tasa especificada (ej. 44100, 48000).",
+ "EdgeTtsRate": "Velocidad Edge-TTS",
+ "EdgeTtsRateDescription": "Velocidad para Edge-TTS, ej. \"+50%\", \"-30%\", o \"+0%\" para predeterminado.",
+ "EdgeTtsPitch": "Tono Edge-TTS",
+ "EdgeTtsPitchDescription": "Ajuste de tono para Edge-TTS, ej. \"+10Hz\", \"-5Hz\", o \"+0Hz\".",
+ "EdgeTtsVolume": "Volumen Edge-TTS",
+ "EdgeTtsVolumeDescription": "Ajuste de volumen para Edge-TTS, ej. \"+20%\", \"-10%\", o \"+0%\".",
+ "DownloadPiperPrompt": "\"Texto a voz\" requiere Piper.\r\n\r\n¿Descargar y utilizar Piper?"
+ },
+ "ShotChanges": {
+ "TitleGenerateOrImport": "Generar/importar cambios de plano",
+ "GenerateShotChanges": "Generar cambios de plano",
+ "ImportShotChanges": "Importar cambios de plano",
+ "GenerateShotChangesWithFfmpeg": "Generar cambios de plano con ffmpeg",
+ "ShotChangeTimeCode": "Código de tiempo de cambio de plano",
+ "OpenShotChangesFile": "Abrir archivo de cambios de plano",
+ "ImportShotChangesFromFile": "Importar cambios de plano desde archivo",
+ "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?"
+ }
+ },
+ "Waveform": {
+ "GuessTimeCodes": "Adivinar códigos de tiempo",
+ "GuessTimeCodesScanBlockSize": "Tamaño bloque escaneo (ms):",
+ "GuessTimeCodesScanBlockAverageMin": "Media mínima del bloque (% del máx):",
+ "GuessTimeCodesScanBlockAverageMax": "Media máxima del bloque (% del máx):",
+ "GuessTimeCodesSplitLongSubtitlesAt": "Dividir subtítulos largos en (ms):",
+ "SpeechToTextSelectedLinesDotDotDot": "Voz a texto líneas seleccionadas...",
+ "SeekSilence": "Buscar silencio",
+ "MinSilenceDurationSeconds": "Duración mín. silencio (seg):",
+ "MaxSilenceVolume": "Volumen máx. silencio (0.0 - 1.0):",
+ "GuessTimeCodesDotDotDot": "Adivinar códigos de tiempo...",
+ "SeekSilenceDotDotDot": "Buscar silencio...",
+ "ToggleShotChange": "Alternar cambio de plano",
+ "ResetWaveformZoomAndSpeed": "Restablecer zoom y velocidad",
+ "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",
+ "SetVideoPositionAndPause": "Pos. vídeo y pausar",
+ "SetVideopositionAndPauseAndCenter": "Pos. vídeo, pausar y centrar",
+ "SetVideoposition": "Establecer posición de vídeo"
+ },
+ "Sync": {
+ "VisualSync": "Sincronización visual",
+ "Sync": "Sincronizar",
+ "StartScene": "Escena inicial",
+ "EndScene": "Escena final",
+ "PlayTwoSecondsAndBack": "Reprod. 2s y atrás",
+ "FindText": "Buscar texto",
+ "ResolutionXDurationYFrameRateZ": "Res.: {0}, duración: {1}, FPS: {2}",
+ "StartSceneMustComeBeforeEndScene": "La escena inicial debe ir antes que la final",
+ "GoToSubPos": "Ir a pos. sub",
+ "SpeedInPercentage": "Velocidad en %",
+ "FromDropFrameValue": "Desde valor drop-frame",
+ "ToDropFrameValue": "A valor drop-frame",
+ "AdjustAll": "Ajustar todo",
+ "AdjustSelectedLines": "Ajustar líneas sel.",
+ "AdjustSelectedLinesAndForward": "Ajustar líneas sel. y adelante",
+ "ToFrameRate": "A tasa fotogramas",
+ "FromFrameRate": "Desde tasa fotogramas",
+ "AdjustAllTimes": "Ajustar todos los tiempos (antes/después)",
+ "ShowEarlier": "Mostrar antes",
+ "ShowLater": "Mostrar después",
+ "ChangeFrameRate": "Cambiar tasa fotogramas",
+ "SetSyncPoint": "Establecer punto sincro",
+ "SyncPoints": "Puntos sincro",
+ "PointSync": "Sincronización puntos",
+ "PointSyncViaOther": "Sincronización puntos vía otro subtítulo",
+ "AdjustmentX": "Ajuste: {0}",
+ "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",
+ "OffsetInSeconds": "Desfase en segundos",
+ "SpeedFactor": "Factor de velocidad"
+ },
+ "Translate": {
+ "TranslateViaCopyPaste": "Auto-traducir vía copiar/pegar",
+ "MaxBlockSize": "Tamaño bloque máx.",
+ "LineSeparator": "Separador línea",
+ "BlockCopyInfo": "Ve al traductor/IA y pega el texto (ya está en el portapapeles), copia el resultado y pulsa el botón de abajo.",
+ "BlockCopyGetFromClipboard": "Obtener texto del portapapeles (del traductor/IA)",
+ "ReCopyTextToClipboard": "Volver a copiar al portapapeles (para el traductor/IA)",
+ "BlockXOfY": "Bloque {0} de {1}",
+ "NoTextInClipboard": "No hay texto en el portapapeles",
+ "TextInClipboardIsSameAsSourceText": "El texto del portapapeles es igual al de origen, inténtelo de nuevo.",
+ "LineMerge": "Unir líneas",
+ "DelayInSecondsBetweenRequests": "Retraso en segundos entre peticiones",
+ "MaxBytesPerRequest": "Bytes máx. por petición",
+ "PromptText": "Texto del prompt",
+ "TranslateEachLineSeparately": "Traduce cada línea por separado"
+ },
+ "Options": {
+ "Settings": {
+ "DialogStyle": "Estilo de diálogo",
+ "DialogStyleDashSecondLineWithoutSpace": "Guion segunda línea sin espacio",
+ "DialogStyleDashSecondLineWithSpace": "Guion segunda línea con espacio",
+ "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)",
+ "ContinuationStyleNoneLeadingTrailingEllipsis": "Ninguno, elipsis para pausas",
+ "ContinuationStyleOnlyTrailingDots": "Puntos (solo al final)",
+ "ContinuationStyleLeadingTrailingDots": "Puntos",
+ "ContinuationStyleOnlyTrailingEllipsis": "Elipsis (solo al final)",
+ "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",
+ "CpsLineLengthStyleCalcNoSpace": "Contar todo menos espacios",
+ "CpsLineLengthStyleCalcCjk": "CJK 1, Latín 0.5",
+ "CpsLineLengthStyleCalcCjkNoSpace": "CJK 1, Latín 0.5, espacio 0",
+ "CpsLineLengthStyleCalcIncludeCompositionCharacters": "Incluir caracteres de composición",
+ "CpsLineLengthStyleCalcIncludeCompositionCharactersNotSpace": "Incluir caracteres composición, no espacios",
+ "CpsLineLengthStyleCalcNoSpaceOrPunctuation": "Sin espacios ni puntuación ()[]-:;,.!?",
+ "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",
+ "SearchSettingsDotDoDot": "Buscar en 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",
+ "TextBoxLiveSpellCheck": "Ortografía en vivo en cuadro de edición",
+ "TextBoxCenterText": "Centrar texto en cuadro de edición",
+ "TextBoxFontBold": "Negrita en cuadro de edición",
+ "TextBoxFontSize": "Tamaño fuente en cuadro de edición",
+ "SubtitleTextBoxAndGridFontName": "Fuente UI en cuadro de edición y lista",
+ "SubtitleGridFontSize": "Tamaño fuente en lista de subtítulos",
+ "SubtitleGridTextSingleLine": "Subtítulo en una sola línea en lista",
+ "SubtitleGridLiveSpellCheck": "Ortografía en vivo en lista",
+ "SubtitleGridShowFormatting": "Mostrar formato (HTML/ASSA) en lista",
+ "ShowUpDownStartTime": "Control arriba/abajo para \"Inicio\"",
+ "ShowUpDownEndTime": "Control arriba/abajo para \"Fin\"",
+ "ShowUpDownDuration": "Control arriba/abajo para \"Duración\"",
+ "ShowUpDownLabels": "Mostrar etiquetas en controles arriba/abajo",
+ "ShowButtonHints": "Mostrar sugerencias de botones",
+ "GridCompactMode": "Usar modo compacto en listas",
+ "UiFont": "Fuente de la interfaz",
+ "Theme": "Tema",
+ "IconTheme": "Tema de iconos",
+ "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",
+ "SingleLineMaxLength": "Longitud máx. línea única",
+ "OptimalCharsPerSec": "CPS óptimos",
+ "MaxCharsPerSec": "CPS máximos",
+ "MaxWordsPerMin": "WPM máximos",
+ "MinDurationMs": "Duración mín. (ms)",
+ "MaxDurationMs": "Duración máx. (ms)",
+ "MinGapMs": "Espacio mín. (ms)",
+ "MaxLines": "Número máx. de líneas",
+ "UnbreakSubtitlesShortThan": "Unir subtítulos más cortos que",
+ "NewEmptyDefaultMs": "Duración predet. nuevo subtítulo (ms)",
+ "PromptBeforeDelete": "Preguntar antes de borrar",
+ "RememberPositionAndSize": "Recordar posición y tamaño de ventana",
+ "AutoBackupOn": "Copia seguridad automática",
+ "AutoBackupIntervalMinutes": "Intervalo copia seguridad (min)",
+ "AutoBackupDeleteAfterDays": "Días de retención de copias",
+ "AutoConvertToUtf8": "Auto-convertir a UTF-8 al abrir",
+ "AutoTrimWhiteSpace": "Auto-recortar espacios",
+ "DefaultEncoding": "Codificación predeterminada",
+ "ColorDurationTooShort": "Color duración si es muy corta",
+ "ColorDurationTooLong": "Color duración si es muy larga",
+ "ColorTextTooLong": "Color texto si es muy largo",
+ "ColorTextTooWide": "Color texto si es muy ancho (píxeles)",
+ "ColorTextTooManyLines": "Color texto si hay más de 2 líneas",
+ "ColorOverlap": "Color superposición tiempos",
+ "ColorGapTooShort": "Color si espacio es muy corto",
+ "ErrorBackgroundColor": "Color fondo error",
+ "WaveformDrawGridLines": "Dibujar líneas cuadrícula",
+ "WaveformCenterVideoPosition": "Centrar posición vídeo",
+ "WaveformShowToolbar": "Mostrar barra de herramientas",
+ "WaveformShowToolbarEdit": "Editar barra 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",
+ "WaveformSnapToShotChanges": "Ajustar a cambios de plano",
+ "WaveformShotChangesAutoGenerate": "Auto-generar cambios plano",
+ "WaveformTextFontSize": "Tamaño fuente texto en onda",
+ "WaveformTextFontBold": "Negrita texto en onda",
+ "WaveformTextColor": "Color texto en onda",
+ "WaveformColor": "Color de la forma de onda",
+ "WaveformBackgroundColor": "Color de fondo de onda",
+ "WaveformSelectedColor": "Color de onda seleccionada",
+ "DownloadFfmpeg": "Descargar ffmpeg",
+ "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",
+ "ShowToolbarSettings": "Icono ajustes",
+ "ShowToolbarLayout": "Icono diseño",
+ "ShowToolbarHelp": "Icono ayuda",
+ "ShowToolbarEncoding": "Mostrar codificación",
+ "ShowToolbarFrameRate": "Mostrar tasa fotogramas",
+ "ProxyAddress": "Dirección proxy",
+ "Username": "Usuario",
+ "Password": "Password",
+ "DefaultFormat": "Formato predeterminado",
+ "DefaultSaveAsFormat": "Formato predeterminado \"Guardar como\"",
+ "FavoriteSubtitleFormats": "Formatos favoritos",
+ "ShowStopButton": "Botón parar",
+ "ShowFullscreenButton": "Botón pantalla completa",
+ "AutoOpenVideoFile": "Abrir vídeo al abrir subtítulos",
+ "DownloadMpv": "Descargar mpv",
+ "DownloadVlc": "Descargar VLC",
+ "GoToLineNumberSetsVideoPosition": "Ir a línea también mueve vídeo",
+ "AdjustAllTimesRememberLineSelectionChoice": "Recordar elección selección líneas al ajustar tiempos",
+ "FilesAndLogs": "Archivos y registros",
+ "ShowErrorLogFile": "Ver archivo registro errores",
+ "ShowWhisperLogFile": "Ver archivo registro Whisper",
+ "ShowSettingsFile": "Ver archivo ajustes",
+ "ShowAssaLayer": "Mostrar cuadro capa ASSA",
+ "WaveformCursorColor": "Color cursor/cabezal onda",
+ "WaveformParagraphLeftColor": "Color borde izquierdo onda",
+ "WaveformParagraphRightColor": "Color borde derecho onda",
+ "WaveformFancyHighColor": "Color onda moderno (alto)",
+ "WaveformFocusOnMouseOver": "Foco al pasar ratón",
+ "ResetAllSettings": "Restablecer todos los ajustes",
+ "ResetShortcuts": "Restablecer atajos",
+ "ResetRecentFiles": "Restablecer recientes",
+ "ResetMultipleReplaceRules": "Restablecer reglas reemplazo",
+ "ResetAppearance": "Restablecer apariencia",
+ "ResetAutoTranslate": "Restablecer auto-traducción",
+ "ResetWindowPositionAndSize": "Restablecer posición ventana",
+ "ResetSettingsTitle": "Restablecer ajustes",
+ "OpenRuleFile": "Abrir archivo reglas",
+ "ExportProfiles": "Exportar perfiles",
+ "SaveRuleProfilesFile": "Guardar archivo perfiles reglas",
+ "RuleProfilesExportedX": "{0} perfiles exportados",
+ "RuleProfilesImportedX": "{0} perfiles importados",
+ "UseSpecialStyleAfterLongGaps": "Estilo especial tras espacios largos",
+ "AddSpace": "Añadir espacio",
+ "ProcessIfEndsWithComma": "Procesar si acaba en coma",
+ "RemoveComma": "Quitar coma",
+ "EditContinuationStyleCustom": "Editar estilo continuación personalizado",
+ "LongGapThreshold": "Umbral espacio largo (ms)",
+ "AfterLongGap": "Tras espacio largo:",
+ "ResetSyntaxColoring": "Restablecer color sintaxis",
+ "ResetWaveform": "Restablecer forma de onda",
+ "ResetRules": "Restablecer reglas",
+ "UseFrameMode": "Usar modo fotogramas (hh.mm.ss.ff)",
+ "TextBoxLimitNewLines": "Limitar saltos línea en cuadro texto",
+ "MpvVideoOutput": "Salida vídeo (mpv)",
+ "MpvOpenGl": "libmpv - OpenGL",
+ "MpvSoftwareRendering": "libmpv - Software (lento)",
+ "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",
+ "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",
+ "VlcWidRendering": "libVLC - Nativo Window ID",
+ "SubtitleSEnterKeyAction": "Acción tecla Enter en lista",
+ "SubtitleSingleClickAction": "Acción un clic en lista",
+ "SubtitleDoubleClickAction": "Acción doble clic en lista",
+ "SaveAsBehavior": "Comportamiento \"Guardar como\"",
+ "SaveAsAppendLanguageCode": "\"Guardar como\" añade código idioma",
+ "GridGoToSubtitleAndSetVideoPosition": "Ir a subtítulo y mover vídeo",
+ "GridGoToNextLine": "Ir a la siguiente línea",
+ "GridGoToSubtitleOnlyWaveformOnly": "Ir a subtítulo (solo onda)",
+ "GridGoToSubtitleAndPause": "Ir a subtítulo y pausar",
+ "GridGoToSubtitleAndPlay": "Ir a subtítulo y reproducir",
+ "GridGoToSubtitleAndPauseAndFocusTextBox": "Ir a sub, pausar y foco cuadro texto",
+ "SubtitleGridFormattingNone": "Sin formato",
+ "SubtitleGridFormattingShowFormatting": "Mostrar formato",
+ "SubtitleGridFormattingShowTags": "Mostrar etiquetas",
+ "WaveformParagraphBackgroundColor": "Color fondo subtítulo en onda",
+ "WaveformParagraphSelectedBackgroundColor": "Color fondo subtítulo seleccionado en onda",
+ "WaveformAllowOverlap": "Permitir superposición (mover/redimensionar)",
+ "SaveAsBehaviorUseSubtitleVideoFilename": "Nombre subtítulo/vídeo",
+ "SaveAsBehaviorUseVideoSubtitleFilename": "Nombre vídeo/subtítulo",
+ "SaveAsBehaviorUseVideoFileName": "Usar nombre de vídeo",
+ "SaveAsBehaviorUseSubtitleFileName": "Usar nombre de subtítulo",
+ "SaveAsAppendLanguageCodeTwoLetter": "Dos letras",
+ "SaveAsAppendLanguageCodeThreeLetter": "Tres letras",
+ "SaveAsAppendLanguageCodeLanguageName": "Nombre del idioma",
+ "SplitOddLineActionWeightTop": "Priorizar arriba",
+ "SplitOddLineActionWeightBottom": "Priorizar abajo",
+ "SplitOddLinesAction": "Acción dividir líneas impares",
+ "OcrUseWordSplitList": "OCR: usar lista división palabras",
+ "SpeechToTextSelectedLinesPromptFistTimeOnly": "Voz a texto: preguntar idioma solo primera vez",
+ "MultipleReplaceShowDotDotDotButtons": "Reemplazo múltiple: botones menú contexto",
+ "GridFocusTextboxAfterInsertNew": "Lista: foco en cuadro texto tras insertar",
+ "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",
+ "TextBoxButtonShowAutoBreak": "C. texto: botón auto-división",
+ "TextBoxButtonShowUnbreak": "C. texto: botón unir",
+ "TextBoxButtonShowItalic": "C. texto: botón cursiva",
+ "TextBoxButtonShowColor": "C. texto: botón color",
+ "TextBoxButtonShowRemoveFormatting": "C. texto: botón quitar formato",
+ "WaveformSingleClickAction": "Acción un clic en onda",
+ "WaveformDoubleClickAction": "Acción doble clic en onda",
+ "AllSettings": "Todos los ajustes",
+ "UiScale": "Escala de la interfaz (%)",
+ "WaveformToolbarItems": "Elementos barra onda",
+ "MatchIconColorToDarkTheme": "Iconos acordes al tema oscuro",
+ "SubtitlePreviewProperties": "Propiedades vista previa",
+ "PixelWidthInfo": "Líneas verdes = límite de ancho máximo | \r\nÁrea roja = el texto excede el límite"
+ },
+ "Shortcuts": {
+ "Title": "Atajos de teclado",
+ "SearchShortcuts": "Buscar atajos...",
+ "Filter": "Filtro",
+ "CategoryGeneral": "General",
+ "CategorySubtitleGridAndTextBox": "Lista y cuadro texto",
+ "CategorySubtitleGrid": "Lista subtítulos",
+ "CategoryWaveform": "Forma de onda",
+ "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.",
+ "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",
+ "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",
+ "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",
+ "EditModifySelection": "Modificar selección",
+ "ListSelectAll": "Seleccionar todo",
+ "ListSelectFirst": "Seleccionar primero",
+ "ListSelectLast": "Seleccionar último",
+ "ListInverseSelection": "Invertir selección",
+ "ListDeleteSelection": "Eliminar selección",
+ "RippleDeleteSelection": "Eliminar selección (efecto rizo)",
+ "Settings": "Ajustes",
+ "Assigned": "Asignado",
+ "Unassigned": "Sin asignar",
+ "PressedKeyX": "Tecla pulsada: {0}",
+ "PressAKey": "Pulse una tecla",
+ "DetectKey": "Detectar tecla",
+ "Control": "Control",
+ "Alt": "Alt",
+ "Win": "Win",
+ "Shift": "Mayús",
+ "ControlMac": "⌃",
+ "AltMac": "⌥",
+ "WinMac": "⌘",
+ "ShiftMac": "⇧",
+ "ResetShortcuts": "Restablecer atajos",
+ "ResetShortcutsDetail": "¿Desea restablecer todos los atajos a sus valores por defecto?",
+ "TogglePlayPause": "Alternar reprod./pausa",
+ "ToggleLockTimeCodes": "Alternar bloqueo tiempos",
+ "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)",
+ "GoToNextBookmark": "Ir al siguiente marcador",
+ "ToggleWaveformToolbar": "Alternar barra herramientas onda",
+ "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",
+ "ToggleFocusGridAndWaveform": "Cambiar foco entre lista y onda",
+ "ToggleFocusTextBoxAndWaveform": "Cambiar foco entre cuadro texto y onda",
+ "ToggleFocusTextBoxAndGrid": "Cambiar foco entre cuadro texto y lista",
+ "GoToPreviousLineAndSetVideoPosition": "Ir a línea anterior y mover vídeo",
+ "GoToPreviousLineFromVideoPosition": "Ir a subtítulo anterior (desde pos. vídeo)",
+ "GoToNextLineFromVideoPosition": "Ir a subtítulo siguiente (desde pos. vídeo)",
+ "GoToNextLineAndSetVideoPosition": "Ir a línea siguiente y mover vídeo",
+ "TextBoxDeleteSelectionNoClipboard": "Cuadro texto: Borrar sin copiar",
+ "TextBoxCut": "Cuadro texto: Cortar",
+ "TextBoxCut2": "Cuadro texto: Cortar (alt.)",
+ "TextBoxPaste": "Cuadro texto: Pegar",
+ "TextBoxCopy": "Cuadro texto: Copiar",
+ "TextBoxSelectAll": "Cuadro texto: Seleccionar todo",
+ "SubtitleGridCut": "Lista: Cortar",
+ "SubtitleGridCopy": "Lista: Copiar",
+ "SubtitleGridPaste": "Lista: Pegar",
+ "SetShortcutForX": "Fijar atajo para \"{0}\"",
+ "CommandFileNewKeepVideo": "Nuevo (mantener vídeo)",
+ "FileOpenOriginal": "Abrir original",
+ "FileCloseOriginal": "Cerrar original",
+ "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",
+ "RemoveTextForHearingImpaired": "Quitar texto defic. auditivos",
+ "JoinSubtitles": "Unir subtítulos",
+ "SplitSubtitle": "Dividir subtítulo",
+ "SpellCheck": "Corrector ortográfico",
+ "SpellCheckGetDictionary": "Obtener diccionario ortográfico",
+ "OpenVideo": "Abrir vídeo",
+ "OpenVideoFromUrl": "Abrir vídeo desde URL",
+ "CloseVideo": "Cerrar vídeo",
+ "SpeechToText": "Voz a texto (Whisper)",
+ "TextToSpeech": "Texto a voz",
+ "BurnIn": "Incrustar subtítulos en vídeo",
+ "GenerateTransparent": "Generar vídeo transparente",
+ "UndockVideoControls": "Desacoplar controles vídeo",
+ "RedockVideoControls": "Reacoplar controles vídeo",
+ "GenerateBlankVideo": "Generar vídeo en blanco",
+ "ReencodeVideo": "Recodificar vídeo",
+ "CutVideo": "Cortar vídeo",
+ "CutVideoSelectedLines": "Cortar vídeo (líneas sel.)",
+ "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",
+ "VideoFullScreen": "Vídeo pantalla completa",
+ "CopyTextFromOriginalSelectedLines": "Copiar texto original (líneas sel.)",
+ "TextBoxRemoveAllFormatting": "Cuadro texto: Quitar formato",
+ "TextBoxItalic": "Cuadro texto: Cursiva",
+ "ResetWaveformZoomAndSpeed": "Restablecer zoom y velocidad onda",
+ "TogglePlaybackSpeed": "Alternar velocidad reproducción",
+ "PlaybackSpeedSlower": "Reproducción más lenta",
+ "PlaybackSpeedFaster": "Reproducción más rápida",
+ "SwitchOriginalAndTranslationSelectedLines": "Intercambiar original/trad. (líneas sel.)",
+ "MergeOriginalIntoTranslationSelectedLines": "Combinar original/trad. (líneas sel.)",
+ "SeekSilence": "Buscar silencios",
+ "SetVideoPositionCurrentSubtitleStart": "Ir al inicio de línea actual",
+ "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",
+ "RepeatPreviousLine": "Repetir línea anterior",
+ "RepeatNextLine": "Repetir línea siguiente",
+ "MoveVideoPositionMilliseconds": "Mover vídeo en milisegundos",
+ "ImportShortcutsTitle": "Importar atajos",
+ "ExportShortcutsTitle": "Exportar atajos",
+ "XShortcutsImportedFromY": "{0} atajos importados de {1}",
+ "XShortcutsExportedToY": "{0} atajos exportados a {1}",
+ "ImportImageSubtitleForEdit": "Importar subtítulo imagen para editar",
+ "ShowPointSyncViaOther": "Mostrar sincro puntos vía otro",
+ "ShowPointSync": "Mostrar sincro por puntos",
+ "ShowMediaInformation": "Mostrar información del medio",
+ "ChooseSubtitleFormat": "Elegir formato subtítulo",
+ "TrimWhitespaceSelectedLines": "Quitar espacios (líneas sel.)",
+ "WaveformHorizontalZoomInCommand": "Zoom horizontal onda +",
+ "WaveformHorizontalZoomOutCommand": "Zoom horizontal onda -",
+ "WaveformVerticalZoomInCommand": "Zoom vertical onda +",
+ "WaveformVerticalZoomOutCommand": "Zoom vertical onda -",
+ "CopySubtitlePathToClipboard": "Copiar ruta subtítulo",
+ "CopySubtitleOriginalPathToClipboard": "Copiar ruta subtítulo original",
+ "FocusTextBox": "Enfocar cuadro texto",
+ "SortByStartTime": "Ordenar por inicio",
+ "SortByEndTime": "Ordenar por fin",
+ "DuplicatesFound": "Se encontraron los siguientes atajos duplicados:",
+ "CopyTextToClipboard": "Copiar texto portapapeles (líneas sel.)",
+ "CopyTextFromOriginalToClipboard": "Copiar texto original (líneas sel.)",
+ "AssaDraw": "Dibujo ASSA",
+ "AssaGenerateProgressBar": "Generar barra progreso ASSA",
+ "AssaGenerateBackgroundBox": "Generar caja fondo ASSA",
+ "AssaStyles": "Estilos ASSA",
+ "AssaProperties": "Propiedades ASSA",
+ "AssaAttachments": "Adjuntos ASSA",
+ "AssaVideoColorPicker": "Selector color vídeo ASSA",
+ "RecalculateDurationSelectedLines": "Recalcular duración (líneas sel.)",
+ "ToggleWaveformAndSpectrogramHeight": "Alternar altura onda/espectro",
+ "ToggleSpectrogramStyle": "Alternar estilo espectrograma",
+ "CopyMsRelativeToCurrentSubtitleLineToClipboard": "Copiar ms relativos a la línea actual",
+ "LayoutZoomIn": "Escalar interfaz +",
+ "LayoutZoomOut": "Escalar interfaz -"
+ },
+ "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",
+ "UnableToAddItem": "¡No se pudo añadir; probablemente ya existe!",
+ "UnableToRemoveItem": "¡No se pudo eliminar!"
+ },
+ "ChooseLanguage": {
+ "Title": "Elegir idioma de la interfaz"
+ }
+ },
+ "Help": {
+ "AboutSubtitleEdit": "Acerca de Subtitle Edit",
+ "CheckForUpdates": "Buscar actualizaciones",
+ "CheckForUpdatesChecking": "Buscando actualizaciones...",
+ "CheckForUpdatesUpToDate": "Está utilizando la última versión.",
+ "CheckForUpdatesNewVersionAvailable": "Nueva versión disponible: {0}",
+ "CheckForUpdatesUnableToCheck": "No se pudo buscar actualizaciones.",
+ "CheckForUpdatesDownloadNewVersion": "Descargar nueva versión"
+ },
+ "Ocr": {
+ "LinesToDraw": "Líneas a dibujar",
+ "CurrentImage": "Imagen actual",
+ "AutoDrawAgain": "Auto-dibujar de nuevo",
+ "StartOcr": "Iniciar OCR",
+ "PauseOcr": "Pausar OCR",
+ "InspectLine": "Inspeccionar línea...",
+ "OcrEngine": "Motor OCR",
+ "Database": "Base de datos",
+ "MaxWrongPixels": "Máx. píxeles erróneos",
+ "MaxErrorPct": "Máx. % error",
+ "NumberOfPixelsIsSpace": "Nº píxeles es espacio",
+ "InspectImageMatches": "Inspeccionar coincidencias",
+ "ResolutionXYAndTopmarginZ": "Res. {0}x{1}, margen sup. {2}",
+ "RunningOcrDotDotDotXY": "Ejecutando OCR... {0}/{1}",
+ "RunningOcrDotDotDot": "Ejecutando OCR...",
+ "AutoSubmitFirstCharacter": "Enviar auto. primer carácter",
+ "EditNOcrDatabase": "Editar base datos nOCR",
+ "ZoomFactorX": "Factor zoom: {0}x",
+ "ExpandInfoX": "Cuenta expansión: {0}",
+ "EditNOcrDatabaseXWithYItems": "Edición nOCR {0} con {1:#,###,##0} elementos",
+ "NewNOcrDatabase": "Nueva base datos nOCR",
+ "RenameNOcrDatabase": "Renombrar base datos nOCR",
+ "NOcrDatabase": "Base de datos nOCR",
+ "DrawMode": "Modo dibujo:",
+ "AddNewCharcter": "Añadir nuevo carácter",
+ "LineIndexX": "Línea {0}",
+ "InspectNOcrAdditions": "Inspeccionar adiciones nOCR",
+ "OcrSelectedLines": "OCR líneas seleccionadas",
+ "ShowImage": "Mostrar imagen",
+ "FixOcrErrors": "Corregir errores OCR",
+ "PromptForUknownWords": "Preguntar palabras desconocidas",
+ "TryToGuessUnknownWords": "Intentar adivinar desconocidas",
+ "AutoBreakIfMoreThanXLines": "Auto-dividir si hay más de {0} líneas",
+ "UnknownWords": "Palabras desconocidas",
+ "AllFixes": "Todas las correcciones",
+ "GuessesUsed": "Adivinanzas usadas",
+ "Ocr": "OCR",
+ "OcrX": "OCR - {0}",
+ "AddBetterMatch": "Añadir mejor coincidencia",
+ "NOcrInspectImageMatches": "nOCR - Inspeccionar coincidencias",
+ "AddToOcrPair": "Añadir a pares reemplazo OCR",
+ "AddNameToOcrReplaceList": "Añadir nombre a lista reemplazo OCR",
+ "WordToAdd": "Palabra a añadir",
+ "NameToAdd": "Nombre a añadir",
+ "ChangeWordFromTo": "Cambiar palabra de/a",
+ "ClearBackground": "Limpiar fondo",
+ "ClearForeground": "Limpiar primer plano",
+ "NOcrDrawHelp": "Consejos para dibujar\r\n────────────────────\r\n• Ctrl para continuar línea\r\n• Ctrl+z=deshacer, Ctrl+y=rehacer",
+ "EditWholeText": "Editar todo el texto",
+ "EditWordOnly": "Editar solo palabra",
+ "ImagePreProcessing": "Pre-procesamiento imagen",
+ "PreProcessingTitle": "Pre-procesamiento",
+ "CropTransparent": "Recortar colores transparentes",
+ "InverseColors": "Invertir colores",
+ "RemoveBorders": "Quitar bordes",
+ "Binarize": "Binarizar",
+ "BorderSize": "Tamaño del borde",
+ "CaptureTopAlign": "Capturar alineación superior",
+ "OcrImage": "Imagen OCR",
+ "OneColor": "Un color (blanco)",
+ "DarknessThreshold": "Umbral de oscuridad",
+ "EditExportDotDotDot": "Editar/exportar...",
+ "EditBinaryOcrDatabase": "Editar base datos \"Binary image compare\"",
+ "BinaryImageCompareDatabase": "Base datos \"Binary image compare\"",
+ "RemoveXFromUnknownWordsList": "Quitar \"{0}\" de desconocidas",
+ "DownloadingPaddleOcrEngineDotDotDot": "Descargando motor Paddle OCR...",
+ "DownloadingPaddleOcrModelsDotDotDot": "Descargando modelos Paddle OCR...",
+ "PaddleOcr": "Paddle OCR",
+ "BinaryImageCompareInspectImageMatches": "\"Binary image compare\" - Inspeccionar"
+ },
+ "Assa": {
+ "AssaDraw": "Dibujo ASSA",
+ "DrawSelectTool": "Seleccionar (mover puntos)",
+ "DrawLineTool": "Línea (F4)",
+ "DrawBezierTool": "Curva Bézier (F5)",
+ "DrawRectangleTool": "Rectángulo (F6)",
+ "DrawCircleTool": "Círculo (F7)",
+ "DrawCloseShape": "Cerrar forma (F8/Enter)",
+ "DrawDeleteShape": "Borrar forma (Supr)",
+ "DrawChangeLayer": "Cambiar capa",
+ "DrawClearAll": "Limpiar todo (Ctrl+N)",
+ "DrawZoomIn": "Zoom + (Ctrl++)",
+ "DrawZoomOut": "Zoom - (Ctrl+-)",
+ "DrawResetView": "Reset vista (Ctrl+0)",
+ "DrawToggleGrid": "Cuadrícula (Ctrl+G)",
+ "DrawCopyToClipboard": "Copiar (Ctrl+C)",
+ "DrawShapes": "Formas",
+ "DrawSelectedPoint": "Punto seleccionado",
+ "DrawSelectedShape": "Forma seleccionada",
+ "DrawSelectedLayer": "Capa seleccionada",
+ "DrawToolX": "Herramienta: {0}",
+ "DrawHelpText": "Clic para puntos • Enter/F8 cierra forma • Mayús+Arrastrar para desplazar • Ctrl+Rueda para zoom",
+ "ProgressBarTitle": "Barra de progreso ASSA",
+ "ProgressBarSettings": "Barra de progreso",
+ "ProgressBarPosition": "Posición",
+ "ProgressBarBottom": "Abajo",
+ "ProgressBarTop": "Arriba",
+ "ProgressBarForeColor": "Color de frente",
+ "ProgressBarBackColor": "Color de fondo",
+ "ProgressBarStyle": "Estilo",
+ "ProgressBarSquareCorners": "Esquinas cuadradas",
+ "ProgressBarRoundedCorners": "Esquinas redondeadas",
+ "ProgressBarChapters": "Capítulos",
+ "ProgressBarSplitterWidth": "Ancho del separador",
+ "ProgressBarSplitterHeight": "Alto del separador",
+ "ProgressBarXAdjustment": "Ajuste X",
+ "ProgressBarYAdjustment": "Ajuste Y",
+ "ProgressBarTextAlignment": "Alineación del texto",
+ "ProgressBarTakePosFromVideo": "Tomar posición del vídeo",
+ "ProgressBarPreview": "Vista previa",
+ "ResolutionResamplerTitle": "Cambiar resolución",
+ "ResolutionResamplerSourceRes": "Resolución origen",
+ "ResolutionResamplerTargetRes": "Resolución destino",
+ "ResolutionResamplerChangeMargins": "Cambiar márgenes",
+ "ResolutionResamplerChangeFontSize": "Cambiar tamaño fuente",
+ "ResolutionResamplerChangePositions": "Cambiar posiciones",
+ "ResolutionResamplerChangeDrawing": "Cambiar dibujo",
+ "ResolutionResamplerFromVideo": "Del vídeo...",
+ "ResolutionResamplerSourceAndTargetEqual": "Origen y destino son iguales - nada que hacer.",
+ "ResolutionResamplerNothingSelected": "Seleccione al menos una opción para cambiar.",
+ "BackgroundBoxGenerator": "Generar caja de fondo",
+ "BackgroundBoxPadding": "Relleno",
+ "BackgroundBoxFillWidth": "Llenar ancho",
+ "BackgroundBoxBoxColor": "Color caja",
+ "BackgroundBoxRadius": "Radio",
+ "BackgroundBoxCircle": "Círculo",
+ "BackgroundBoxSpikes": "Puntas",
+ "BackgroundBoxBubbles": "Burbujas",
+ "BackgroundBoxWave": "Onda",
+ "BackgroundBoxHexagon": "Hexágono",
+ "BackgroundBoxTornPaper": "Papel rasgado",
+ "BackgroundBoxCloud": "Nube",
+ "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",
+ "StylesTitleX": "Estilos - {0}",
+ "PropertiesTitleX": "Propiedades - {0}",
+ "AttachmentsTitleX": "Adjuntos - {0}",
+ "SmartWrappingTopWide": "0: Ajuste inteligente (superior ancho)",
+ "EndOfLineWrapping": "1: Ajuste al final, solo breaks \\N",
+ "NoWrapping": "2: Sin ajuste, breaks \\N y \\n",
+ "SmartWrappingBottomWide": "3: Ajuste inteligente (inferior ancho)",
+ "FontsAndGraphics": "Fuentes y gráficos",
+ "WrapStyle": "Estilo de ajuste",
+ "BorderAndShadowScaling": "Escala de borde y sombra",
+ "OriginalScript": "Guion original",
+ "Graphics": "Gráficos",
+ "CopyToStorageStyles": "Copiar a estilos de almacén",
+ "CopyToFileStyles": "Copiar a estilos de archivo",
+ "SetStyleAsDefault": "Estilo por defecto",
+ "TakeUsagesFromDotDotDot": "Tomar usos de...",
+ "NoAttachmentsFound": "No hay adjuntos en el archivo ASSA.",
+ "DeleteStyleQuestion": "¿Borrar estilo?",
+ "DeleteStylesQuestion": "¿Borrar estilos?",
+ "OpenStyleImportFile": "Abrir archivo para importar estilos",
+ "Primary": "Primario",
+ "Secondary": "Secundario",
+ "ApplyOverrideTags": "Aplicar etiquetas anulación",
+ "ChooseOverrideTagToAdd": "Elegir etiqueta a añadir",
+ "FontSizeChange": "Cambio tamaño fuente",
+ "MoveTextFromLeftToRight": "Mover de izq. a der.",
+ "ColorFromWhiteToRed": "Color blanco a rojo",
+ "RotateXSlow": "Rotar X (lento)",
+ "RotateX": "Rotar X",
+ "RotateY": "Rotar Y",
+ "RotateTilt": "Rotar inclinación",
+ "SpaceIncrease": "Aumento espacio",
+ "PopIn": "Aparición (pop in)",
+ "SpinIn": "Giro (spin in)",
+ "PlayCurrent": "Reprod. actual",
+ "SetPosition": "Fijar posición",
+ "ImageColorPicker": "Selector color imagen",
+ "CopyColorAsHextoClipboard": "Copiar color hex",
+ "GeneratingBackgroundBoxXOfY": "Generando caja fondo {0} de {1}...",
+ "ApplyAdvancedEffectTitle": "Aplicar efecto avanzado",
+ "ChooseEffect": "Elegir efecto",
+ "AdvancedEffectTypewriter": "Máquina de escribir",
+ "AdvancedEffectTypewriterDescription": "Revela el texto carácter a carácter",
+ "AdvancedEffectTypewriterWithHighlight": "Máquina escribir con resaltado",
+ "AdvancedEffectTypewriterWithHighlightDescription": "Carácter a carácter con brillo en el actual",
+ "AdvancedEffectWordByWord": "Palabra por palabra",
+ "AdvancedEffectWordByWordDescription": "Revela el texto palabra a palabra",
+ "AdvancedEffectKaraoke": "Karaoke",
+ "AdvancedEffectKaraokeDescription": "Resalta cada carácter de izquierda a derecha",
+ "AdvancedEffectFancyKaraoke": "Karaoke - pop palabra activa",
+ "AdvancedEffectFancyKaraokeDescription": "Atenúa inactivas y aplica brillo/animación a la activa (vía \\u1)",
+ "AdvancedEffectScrambleReveal": "Revelación revuelta",
+ "AdvancedEffectScrambleRevealDescription": "Caracteres aleatorios que se descifran de izq a der",
+ "AdvancedEffectRainbowPulse": "Pulso arcoíris",
+ "AdvancedEffectRainbowPulseDescription": "Cada carácter cicla colores independientemente",
+ "AdvancedEffectWave": "Onda",
+ "AdvancedEffectWaveDescription": "Efecto de onda senoidal arriba y abajo",
+ "AdvancedEffectWaveBlue": "Onda (azul)",
+ "AdvancedEffectWaveBlueDescription": "Onda con animación en azul y cian",
+ "AdvancedEffectStarWarsScroll": "Créditos Star Wars",
+ "AdvancedEffectStarWarsScrollDescription": "Texto con perspectiva inclinada hacia arriba",
+ "AdvancedEffectEndCreditsScroll": "Créditos scroll",
+ "AdvancedEffectEndCreditsScrollDescription": "Scroll continuo hacia arriba para créditos finales",
+ "AdvancedEffectStarfield": "Campo de estrellas (fondo)",
+ "AdvancedEffectStarfieldDescription": "Efecto de viaje hiperespacial",
+ "AdvancedEffectRain": "Lluvia infinita (fondo)",
+ "AdvancedEffectRainDescription": "Efecto lluvia con capas de profundidad",
+ "AdvancedEffectSnow": "Nieve infinita (fondo)",
+ "AdvancedEffectSnowDescription": "Nevada continua con capas",
+ "AdvancedEffectOldMovie": "Cine antiguo (fondo)",
+ "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",
+ "AdvancedEffectBounceInDescription": "Caracteres que entran rebotando elásticamente",
+ "AdvancedEffectFireflies": "Luciérnagas (fondo)",
+ "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",
+ "AdvancedEffectConfettiDescription": "Lluvia de papeles de colores desde esquinas y centro",
+ "AdvancedEffectHearts": "Corazones (lluvia)",
+ "AdvancedEffectHeartsDescription": "Corazones Bézier que caen suavemente",
+ "AdvancedEffectWordSpacing": "Espaciado de palabras",
+ "AdvancedEffectWordSpacingDescription": "Aumenta espacio entre palabras mediante etiqueta \\fsp",
+ "AdvancedEffectFancyKaraokeAutoDetectActiveWord": "Auto-detectar palabra activa",
+ "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",
+ "AdvancedEffectSlowZoomIn": "Zoom in lento",
+ "AdvancedEffectSlowZoomInDescription": "El texto crece ligeramente durante el subtítulo",
+ "AdvancedEffectFadeIn": "Transición - Fundido entrada",
+ "AdvancedEffectFadeInDescription": "Vídeo aparece desde negro línea a línea",
+ "AdvancedEffectFadeOut": "Transición - Fundido salida",
+ "AdvancedEffectFadeOutDescription": "Vídeo termina en negro línea a línea",
+ "AdvancedEffectTvClose": "Transición - Cierre TV",
+ "AdvancedEffectTvCloseDescription": "Barras negras que cierran hacia el centro",
+ "AdvancedEffectSlideInLeft": "Deslizar desde izquierda",
+ "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",
+ "OverrideTagsHistory": "Historial etiquetas anulación"
+ },
+ "About": {
+ "Title": "Acerca de Subtite Edit",
+ "TranslatedBy": "Traducido por: {0}",
+ "LicenseText": "Subtitle Edit es software libre bajo la licencia MIT.",
+ "DescriptionTextBeta": "Subtitle Edit 5 beta es una versión de desarrollo de nuestra próxima gran versión.\nEstamos refinando activamente las herramientas y agradecemos tu ayuda en las pruebas.\nPor favor, comparte tus comentarios para ayudarnos a asegurar la mejor versión final.\n\n¡Gracias por ser parte de la comunidad de Subtitle Edit! :)",
+ "IssueTrackingAndSourceCode": "Seguimiento de problemas y código fuente: ",
+ "GitHub": "Github",
+ "Donate": "Donar: ",
+ "PayPal": "PayPal",
+ "GitHubSponsor": "Github sponsor",
+ "Or": " o "
+ }
+}
\ No newline at end of file
diff --git a/src/UI/Controls/AudioVisualizerControl/AudioVisualizer.cs b/src/UI/Controls/AudioVisualizerControl/AudioVisualizer.cs
index 0cc9bb7f3ee..b2bc663053e 100644
--- a/src/UI/Controls/AudioVisualizerControl/AudioVisualizer.cs
+++ b/src/UI/Controls/AudioVisualizerControl/AudioVisualizer.cs
@@ -76,11 +76,7 @@ public WavePeakData2? WavePeaks
public double StartPositionSeconds
{
get => GetValue(StartPositionSecondsProperty);
- set
- {
- var clampedValue = Math.Max(0, Math.Min(value, MaxStartPositionSeconds));
- SetValue(StartPositionSecondsProperty, clampedValue);
- }
+ set => SetValue(StartPositionSecondsProperty, Math.Clamp(value, 0, MaxStartPositionSeconds));
}
public double ZoomFactor
@@ -629,7 +625,7 @@ private void OnPointerWheelChanged(object? sender, PointerWheelEventArgs e)
newStart = 0;
}
- _audioVisualizerLastScroll = Environment.TickCount64; // Update the last scroll time
+ _audioVisualizerLastScroll = _lastMouseWheelScroll; // Update the last scroll time
StartPositionSeconds = newStart;
OnHorizontalScroll?.Invoke(this, new PositionEventArgs { PositionInSeconds = newStart });
diff --git a/src/UI/Controls/AudioVisualizerControl/IsSelectedHelper.cs b/src/UI/Controls/AudioVisualizerControl/IsSelectedHelper.cs
index 13a37db59e6..d95c4f126e5 100644
--- a/src/UI/Controls/AudioVisualizerControl/IsSelectedHelper.cs
+++ b/src/UI/Controls/AudioVisualizerControl/IsSelectedHelper.cs
@@ -48,7 +48,7 @@ private void FindNextSelection(int position)
}
}
- private struct SelectionRange
+ private readonly struct SelectionRange
{
public readonly int Start;
public readonly int End;
diff --git a/src/UI/DependencyInjectionExtensions.cs b/src/UI/DependencyInjectionExtensions.cs
index 29bb98093ef..bcdf07a2d21 100644
--- a/src/UI/DependencyInjectionExtensions.cs
+++ b/src/UI/DependencyInjectionExtensions.cs
@@ -197,6 +197,7 @@ public static void AddSubtitleEditServices(this IServiceCollection collection)
collection.AddTransient();
collection.AddTransient();
collection.AddTransient();
+ collection.AddTransient();
collection.AddTransient();
collection.AddTransient();
diff --git a/src/UI/Features/Assa/AssaApplyAdvancedEffect/AssaApplyAdvancedEffectWindow.cs b/src/UI/Features/Assa/AssaApplyAdvancedEffect/AssaApplyAdvancedEffectWindow.cs
index 8a2f78546e9..d96579f3e1f 100644
--- a/src/UI/Features/Assa/AssaApplyAdvancedEffect/AssaApplyAdvancedEffectWindow.cs
+++ b/src/UI/Features/Assa/AssaApplyAdvancedEffect/AssaApplyAdvancedEffectWindow.cs
@@ -85,29 +85,24 @@ public AssaApplyAdvancedEffectWindow(AssaApplyAdvancedEffectViewModel vm)
activeGlowRow.Children.Add(new TextBlock { Text = Se.Language.Assa.AdvancedEffectFancyKaraokeGlow, VerticalAlignment = VerticalAlignment.Center, FontSize = 12 });
var applyGlowCheckBox = UiUtil.MakeCheckBox(fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.ApplyGlow));
activeGlowRow.Children.Add(applyGlowCheckBox);
- var activeGlowColorPicker = UiUtil.MakeColorPicker(fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.GlowColor));
+ var activeGlowColorButton = UiUtil.MakeColorPickerButton(fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.GlowColor), false);
// Show/hide the row based on the checkbox state
- activeGlowColorPicker.Bind(ColorPicker.IsVisibleProperty, new Binding(nameof(CheckBox.IsChecked)) { Source = applyGlowCheckBox, Mode = BindingMode.OneWay });
- activeGlowRow.Children.Add(activeGlowColorPicker);
+ 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 = 12 });
- activeColorRow.Children.Add(UiUtil.MakeColorPicker(fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.ActiveWordColor)));
+ 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 = 12 });
- inactiveColorRow.Children.Add(UiUtil.MakeColorPicker(fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.InactiveWordColor)));
-
- var opacityRow = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Margin = new Thickness(0, 6, 0, 0) };
- opacityRow.Children.Add(new TextBlock { Text = Se.Language.Assa.AdvancedEffectFancyKaraokeInactiveOpacity, VerticalAlignment = VerticalAlignment.Center, FontSize = 12 });
- opacityRow.Children.Add(UiUtil.MakeNumericUpDownInt(0, 255, 0x90, 130, fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.InactiveAlpha)));
+ inactiveColorRow.Children.Add(UiUtil.MakeColorPickerButton(fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.InactiveWordColor), true));
var settingsStack = new StackPanel { Spacing = 2 };
settingsStack.Children.Add(autoDetectActiveWordRow);
settingsStack.Children.Add(activeGlowRow);
settingsStack.Children.Add(activeColorRow);
settingsStack.Children.Add(inactiveColorRow);
- settingsStack.Children.Add(opacityRow);
panel.Children.Add(settingsStack);
}
else if (item is AdvancedEffectWordSpacing wordSpacingItem)
diff --git a/src/UI/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectFancyKaraoke.cs b/src/UI/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectFancyKaraoke.cs
index 8c9a7e75f58..497d64ada2b 100644
--- a/src/UI/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectFancyKaraoke.cs
+++ b/src/UI/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectFancyKaraoke.cs
@@ -31,11 +31,6 @@ public class AdvancedEffectFancyKaraoke : IAdvancedEffectDisplay
///
public bool AutoDetectActiveWord { get; set; } = false;
- ///
- /// Alpha value used for inactive words (ASS \alpha uses hex).
- ///
- public int InactiveAlpha { get; set; } = 100;
-
///
/// Glow color used for the active word's 3c (ASS BGR).
///
@@ -50,7 +45,7 @@ public class AdvancedEffectFancyKaraoke : IAdvancedEffectDisplay
/// Color used for inactive words' primary color (\1c). Default dim gray.
/// This ensures color is explicitly reset after the active word so subsequent words are not colored.
///
- public Color InactiveWordColor { get; set; } = Color.FromRgb(0x80, 0x80, 0x80);
+ public Color InactiveWordColor { get; set; } = Color.FromArgb(0xEE, 0xEE, 0xEE, 0xEE);
///
/// When true, apply the glow (3c, blur, scale transform) to the active word.
@@ -88,7 +83,7 @@ public List ApplyEffect(
if (!string.IsNullOrEmpty(posTags)) sb.Append(posTags);
// Inactive tags now explicitly set \1c to InactiveWordColor so color resets after active word.
- string inactiveTags = $"{{\\alpha&H{InactiveAlpha:X2}&\\1c{ToAssColor(InactiveWordColor)}\\bord0\\shad0\\blur0\\fscx100\\fscy100}}";
+ string inactiveTags = $"{{\\alpha&H{(255 -InactiveWordColor.A):X2}&\\1c{ToAssColor(InactiveWordColor)}\\bord0\\shad0\\blur0\\fscx100\\fscy100}}";
if (parsed == null || string.IsNullOrEmpty(parsed.Value.Active))
{
@@ -157,7 +152,7 @@ public List ApplyEffect(
string posTags = ExtractPositionalTags(sub.Text);
// Inactive tags explicitly include InactiveWordColor so color is reset for non-active words and spaces.
- string inactiveTags = $"{{\\alpha&H{InactiveAlpha:X2}&\\1c{ToAssColor(InactiveWordColor)}\\bord0\\shad0\\blur0\\fscx100\\fscy100}}";
+ string inactiveTags = $"{{\\alpha&H{255 - InactiveWordColor.A:X2}&\\1c{ToAssColor(InactiveWordColor)}\\bord0\\shad0\\blur0\\fscx100\\fscy100}}";
// Build active tag depending on ApplyGlow
string activeTags;
diff --git a/src/UI/Features/Files/ImportPlainText/ImportPlainTextViewModel.cs b/src/UI/Features/Files/ImportPlainText/ImportPlainTextViewModel.cs
index b0ec9cc5491..b7b4d71a469 100644
--- a/src/UI/Features/Files/ImportPlainText/ImportPlainTextViewModel.cs
+++ b/src/UI/Features/Files/ImportPlainText/ImportPlainTextViewModel.cs
@@ -5,6 +5,8 @@
using CommunityToolkit.Mvvm.Input;
using Nikse.SubtitleEdit.Core.Common;
using Nikse.SubtitleEdit.Features.Main;
+using Nikse.SubtitleEdit.Features.Video.SpeechToText;
+using Nikse.SubtitleEdit.Logic;
using Nikse.SubtitleEdit.Logic.Config;
using Nikse.SubtitleEdit.Logic.Media;
using System;
@@ -38,8 +40,9 @@ public partial class ImportPlainTextViewModel : ObservableObject
public bool OkPressed { get; private set; }
private Subtitle _subtitle = new Subtitle();
- private string _videoFileName = string.Empty;
+ private string _videoFileName = string.Empty;
private readonly IFileHelper _fileHelper;
+ private readonly IWindowService _windowService;
private readonly List _textExtensions = new List
{
"*.txt",
@@ -48,9 +51,10 @@ public partial class ImportPlainTextViewModel : ObservableObject
private bool _dirty;
private readonly System.Timers.Timer _timerUpdatePreview;
- public ImportPlainTextViewModel(IFileHelper fileHelper)
+ public ImportPlainTextViewModel(IFileHelper fileHelper, IWindowService windowService)
{
_fileHelper = fileHelper;
+ _windowService = windowService;
Subtitles = new ObservableCollection();
Files = new ObservableCollection();
SplitAtOptions = new ObservableCollection
@@ -93,7 +97,7 @@ private void TimerUpdatePreviewElapsed(object? sender, ElapsedEventArgs e)
subtitles = TimeCodeCalculator.CalculateFixedTimeCodes(subtitles, FixedDurationMs, MinGapMs);
}
else
- {
+ {
subtitles = TimeCodeCalculator.CalculateTimeCodes(
subtitles,
Se.Settings.General.SubtitleOptimalCharactersPerSeconds,
@@ -242,9 +246,45 @@ private void Cancel()
}
[RelayCommand]
- private void AlignScriptWithTimestampsFromWhisper()
+ private async Task AlignScriptWithTimestampsFromWhisper()
{
+ if (Window == null)
+ {
+ return;
+ }
+
+ // Wait for any pending preview update to finish populating Subtitles.
+ if (_dirty)
+ {
+ await Task.Delay(500);
+ }
+
+ if (Subtitles.Count == 0)
+ {
+ return;
+ }
+
+ if (string.IsNullOrEmpty(_videoFileName) || !File.Exists(_videoFileName))
+ {
+ var picked = await _fileHelper.PickOpenVideoFile(Window, "Open video file for transcription");
+ if (string.IsNullOrEmpty(picked))
+ {
+ return;
+ }
+
+ _videoFileName = picked;
+ }
+
+ var whisperVm = await _windowService.ShowDialogAsync(
+ Window,
+ viewModel => { viewModel.Initialize(_videoFileName, -1); });
+
+ if (!whisperVm.OkPressed || whisperVm.TranscribedSubtitle.Paragraphs.Count == 0)
+ {
+ return;
+ }
+ ScriptSyncService.SyncScript(Subtitles.ToList(), whisperVm.TranscribedSubtitle);
}
diff --git a/src/UI/Features/Files/ImportPlainText/ImportPlainTextWindow.cs b/src/UI/Features/Files/ImportPlainText/ImportPlainTextWindow.cs
index 1b350c3224a..66625fec462 100644
--- a/src/UI/Features/Files/ImportPlainText/ImportPlainTextWindow.cs
+++ b/src/UI/Features/Files/ImportPlainText/ImportPlainTextWindow.cs
@@ -70,7 +70,7 @@ public ImportPlainTextWindow(ImportPlainTextViewModel vm)
var buttonAlignViaWhisper = UiUtil.MakeButton(Se.Language.File.Import.AlignViaWhisper, vm.AlignScriptWithTimestampsFromWhisperCommand);
var buttonOk = UiUtil.MakeButtonOk(vm.OkCommand);
var buttonCancel = UiUtil.MakeButtonCancel(vm.CancelCommand);
- var panelButtons = UiUtil.MakeButtonBar(buttonOk, buttonCancel);
+ var panelButtons = UiUtil.MakeButtonBar(buttonAlignViaWhisper, buttonOk, buttonCancel);
grid.Add(panelImport, 0);
grid.Add(MakeTextBoxAndControlsView(vm), 1);
diff --git a/src/UI/Features/Files/ImportPlainText/ScriptSyncService.cs b/src/UI/Features/Files/ImportPlainText/ScriptSyncService.cs
new file mode 100644
index 00000000000..3f82386e705
--- /dev/null
+++ b/src/UI/Features/Files/ImportPlainText/ScriptSyncService.cs
@@ -0,0 +1,319 @@
+using Nikse.SubtitleEdit.Core.Common;
+using Nikse.SubtitleEdit.Features.Main;
+using Nikse.SubtitleEdit.Logic.Config;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Nikse.SubtitleEdit.Features.Files.ImportPlainText;
+
+public static class ScriptSyncService
+{
+ private sealed record WordTimestamp(string Word, double StartMs, double EndMs);
+
+ private const int Lookahead = 60;
+ private const double SimilarityThreshold = 0.45;
+
+ public static void SyncScript(List scriptLines, Subtitle whisperSubtitle)
+ {
+ var minDurationMs = (double)Se.Settings.General.SubtitleMinimumDisplayMilliseconds;
+ var maxDurationMs = (double)Se.Settings.General.SubtitleMaximumDisplayMilliseconds;
+ var minGapMs = (double)Se.Settings.General.MinimumMillisecondsBetweenLines;
+
+ var whisperWords = ExtractWordTimestamps(whisperSubtitle);
+ if (whisperWords.Count == 0)
+ {
+ return;
+ }
+
+ var scriptTokens = new List<(string Word, int LineIdx)>();
+ for (var i = 0; i < scriptLines.Count; i++)
+ {
+ var rawText = HtmlUtil.RemoveHtmlTags(scriptLines[i].Text ?? string.Empty, true);
+ var words = rawText.Split(new[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
+ foreach (var word in words)
+ {
+ scriptTokens.Add((word, i));
+ }
+ }
+
+ if (scriptTokens.Count == 0)
+ {
+ return;
+ }
+
+ var alignments = AlignWords(scriptTokens.Select(t => t.Word).ToList(), whisperWords);
+
+ var lineStartMs = new double[scriptLines.Count];
+ var lineEndMs = new double[scriptLines.Count];
+ var lineHasMatch = new bool[scriptLines.Count];
+ for (var i = 0; i < lineStartMs.Length; i++)
+ {
+ lineStartMs[i] = -1;
+ lineEndMs[i] = -1;
+ }
+
+ for (var i = 0; i < alignments.Count; i++)
+ {
+ int whisperIdx = alignments[i];
+ if (whisperIdx < 0)
+ {
+ continue;
+ }
+
+ int lineIdx = scriptTokens[i].LineIdx;
+ var wt = whisperWords[whisperIdx];
+ if (!lineHasMatch[lineIdx])
+ {
+ lineStartMs[lineIdx] = wt.StartMs;
+ lineEndMs[lineIdx] = wt.EndMs;
+ lineHasMatch[lineIdx] = true;
+ }
+ else
+ {
+ lineEndMs[lineIdx] = wt.EndMs;
+ }
+ }
+
+ InterpolateUnmatched(lineStartMs, lineEndMs, lineHasMatch, minDurationMs, minGapMs);
+
+ // Apply min/max duration clamping
+ for (int i = 0; i < scriptLines.Count; i++)
+ {
+ if (lineStartMs[i] < 0)
+ {
+ continue;
+ }
+
+ lineEndMs[i] = Math.Max(lineEndMs[i], lineStartMs[i] + minDurationMs);
+ if (maxDurationMs > 0)
+ {
+ lineEndMs[i] = Math.Min(lineEndMs[i], lineStartMs[i] + maxDurationMs);
+ }
+ }
+
+ // Overlap prevention: ensure each line starts at least minGapMs after the previous ends
+ for (int i = 1; i < scriptLines.Count; i++)
+ {
+ if (lineStartMs[i] < 0 || lineStartMs[i - 1] < 0)
+ {
+ continue;
+ }
+
+ var minStart = lineEndMs[i - 1] + minGapMs;
+ if (lineStartMs[i] < minStart)
+ {
+ lineStartMs[i] = minStart;
+ lineEndMs[i] = Math.Max(lineEndMs[i], lineStartMs[i] + minDurationMs);
+ }
+ }
+
+ for (int i = 0; i < scriptLines.Count; i++)
+ {
+ if (lineStartMs[i] < 0)
+ {
+ continue;
+ }
+
+ scriptLines[i].StartTime = TimeSpan.FromMilliseconds(lineStartMs[i]);
+ scriptLines[i].EndTime = TimeSpan.FromMilliseconds(lineEndMs[i]);
+ scriptLines[i].UpdateDuration();
+ }
+ }
+
+ private static List AlignWords(List scriptWords, List whisperWords)
+ {
+ var result = new List(scriptWords.Count);
+ int whisperPos = 0;
+
+ for (int i = 0; i < scriptWords.Count; i++)
+ {
+ int windowEnd = Math.Min(whisperPos + Lookahead, whisperWords.Count);
+ double bestScore = SimilarityThreshold;
+ int bestPos = -1;
+
+ for (int wp = whisperPos; wp < windowEnd; wp++)
+ {
+ double score = WordSimilarity(scriptWords[i], whisperWords[wp].Word);
+ if (score > bestScore)
+ {
+ bestScore = score;
+ bestPos = wp;
+ }
+ }
+
+ result.Add(bestPos);
+ if (bestPos >= 0)
+ {
+ whisperPos = bestPos + 1;
+ }
+ }
+
+ return result;
+ }
+
+ private static List ExtractWordTimestamps(Subtitle subtitle)
+ {
+ var result = new List();
+
+ // Detect whisper word-level highlight output: each paragraph wraps its timed word in …
+ bool isWordLevel = subtitle.Paragraphs.Any(p => p.Text.Contains("", StringComparison.OrdinalIgnoreCase));
+
+ if (isWordLevel)
+ {
+ foreach (var paragraph in subtitle.Paragraphs)
+ {
+ var text = paragraph.Text;
+ var startTag = text.IndexOf("", StringComparison.OrdinalIgnoreCase);
+ var endTag = text.IndexOf("", StringComparison.OrdinalIgnoreCase);
+ if (startTag >= 0 && endTag > startTag + 2)
+ {
+ var word = text.Substring(startTag + 3, endTag - startTag - 3).Trim();
+ if (!string.IsNullOrEmpty(word))
+ {
+ result.Add(new WordTimestamp(word,
+ paragraph.StartTime.TotalMilliseconds,
+ paragraph.EndTime.TotalMilliseconds));
+ }
+ }
+ }
+ }
+ else
+ {
+ foreach (var paragraph in subtitle.Paragraphs)
+ {
+ var text = HtmlUtil.RemoveHtmlTags(paragraph.Text, true);
+ var words = text.Split(new[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
+ if (words.Length == 0)
+ {
+ continue;
+ }
+
+ double startMs = paragraph.StartTime.TotalMilliseconds;
+ double totalMs = paragraph.EndTime.TotalMilliseconds - startMs;
+ int totalChars = words.Sum(w => w.Length);
+
+ double currentMs = startMs;
+ foreach (var word in words)
+ {
+ double proportion = totalChars > 0 ? (double)word.Length / totalChars : 1.0 / words.Length;
+ double durationMs = totalMs * proportion;
+ result.Add(new WordTimestamp(word, currentMs, currentMs + durationMs));
+ currentMs += durationMs;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ private static void InterpolateUnmatched(double[] lineStartMs, double[] lineEndMs, bool[] lineHasMatch, double minDurationMs, double minGapMs)
+ {
+ int n = lineStartMs.Length;
+ var matchedIndices = new List();
+ for (int i = 0; i < n; i++)
+ {
+ if (lineHasMatch[i])
+ {
+ matchedIndices.Add(i);
+ }
+ }
+
+ if (matchedIndices.Count == 0)
+ {
+ return;
+ }
+
+ for (int i = 0; i < n; i++)
+ {
+ if (lineHasMatch[i])
+ {
+ continue;
+ }
+
+ int prevMatched = -1;
+ int nextMatched = -1;
+
+ for (int m = matchedIndices.Count - 1; m >= 0; m--)
+ {
+ if (matchedIndices[m] < i) { prevMatched = matchedIndices[m]; break; }
+ }
+ for (int m = 0; m < matchedIndices.Count; m++)
+ {
+ if (matchedIndices[m] > i) { nextMatched = matchedIndices[m]; break; }
+ }
+
+ if (prevMatched >= 0 && nextMatched >= 0)
+ {
+ double prevEnd = lineEndMs[prevMatched];
+ double nextStart = lineStartMs[nextMatched];
+ double totalGap = nextStart - prevEnd;
+ int gapLines = nextMatched - prevMatched;
+ double posInGap = i - prevMatched;
+ lineStartMs[i] = prevEnd + totalGap * posInGap / gapLines;
+ lineEndMs[i] = Math.Max(prevEnd + totalGap * (posInGap + 1) / gapLines, lineStartMs[i] + minDurationMs);
+ }
+ else if (prevMatched >= 0)
+ {
+ int offset = i - prevMatched;
+ lineStartMs[i] = lineEndMs[prevMatched] + (offset - 1) * minGapMs;
+ lineEndMs[i] = lineStartMs[i] + minGapMs;
+ }
+ else if (nextMatched >= 0)
+ {
+ int offset = nextMatched - i;
+ lineEndMs[i] = lineStartMs[nextMatched] - (offset - 1) * minGapMs;
+ lineStartMs[i] = Math.Max(0, lineEndMs[i] - minGapMs);
+ }
+ }
+ }
+
+ private static string NormalizeWord(string word)
+ => new string(word.ToLowerInvariant().Where(char.IsLetterOrDigit).ToArray());
+
+ private static double WordSimilarity(string a, string b)
+ {
+ a = NormalizeWord(a);
+ b = NormalizeWord(b);
+ if (a.Length == 0 && b.Length == 0)
+ {
+ return 1.0;
+ }
+
+ if (a.Length == 0 || b.Length == 0)
+ {
+ return 0.0;
+ }
+
+ if (a == b)
+ {
+ return 1.0;
+ }
+
+ int dist = LevenshteinDistance(a, b);
+ return 1.0 - (double)dist / Math.Max(a.Length, b.Length);
+ }
+
+ private static int LevenshteinDistance(string a, string b)
+ {
+ int m = a.Length, n = b.Length;
+ var prev = new int[n + 1];
+ var curr = new int[n + 1];
+ for (int j = 0; j <= n; j++)
+ {
+ prev[j] = j;
+ }
+
+ for (int i = 1; i <= m; i++)
+ {
+ curr[0] = i;
+ for (int j = 1; j <= n; j++)
+ {
+ int cost = a[i - 1] == b[j - 1] ? 0 : 1;
+ curr[j] = Math.Min(Math.Min(prev[j] + 1, curr[j - 1] + 1), prev[j - 1] + cost);
+ }
+ Array.Copy(curr, prev, n + 1);
+ }
+ return prev[n];
+ }
+}
diff --git a/src/UI/Features/Main/Layout/InitMenu.cs b/src/UI/Features/Main/Layout/InitMenu.cs
index a236ed00c88..365df3406da 100644
--- a/src/UI/Features/Main/Layout/InitMenu.cs
+++ b/src/UI/Features/Main/Layout/InitMenu.cs
@@ -646,6 +646,18 @@ public static void Make(MainViewModel vm)
[!MenuItem.IsVisibleProperty] = new Binding(nameof(vm.AreVideoControlsUndocked)) { Converter = new InverseBooleanConverter() },
},
new MenuItem
+ {
+ Header = l.ToggleSelectSubtitleWhilePlayingCurrentlyOn,
+ Command = vm.ToggleCurrentSubtitleWhilePlayingCommand,
+ [!MenuItem.IsVisibleProperty] = new Binding(nameof(vm.SelectCurrentSubtitleWhilePlaying)),
+ },
+ new MenuItem
+ {
+ Header = l.ToggleSelectSubtitleWhilePlayingCurrentlyOff,
+ Command = vm.ToggleCurrentSubtitleWhilePlayingCommand,
+ [!MenuItem.IsVisibleProperty] = new Binding(nameof(vm.SelectCurrentSubtitleWhilePlaying)) { Converter = new InverseBooleanConverter() },
+ },
+ new MenuItem
{
Header = l.DockVideoControls,
Command = vm.VideoRedockControlsCommand,
diff --git a/src/UI/Features/Main/MainView.cs b/src/UI/Features/Main/MainView.cs
index c6f36ca5204..38015164b00 100644
--- a/src/UI/Features/Main/MainView.cs
+++ b/src/UI/Features/Main/MainView.cs
@@ -75,10 +75,9 @@ protected override object Build()
InitMenu.Make(_vm);
root.Children.Add(_vm.Menu.Dock(Dock.Top));
- if (Se.Settings.Appearance.ShowHorizontalLineAboveToolbar)
- {
- root.Children.Add(UiUtil.MakeVerticalSeperator(0.5, 0.5, new Thickness(0, 0, 0, 0)).Dock(Dock.Top));
- }
+ _vm.ToolbarTopSeparator = UiUtil.MakeHorizontalSeparator(0.5, 0.5, new Thickness(0, 0, 0, 0));
+ _vm.ToolbarTopSeparator.IsVisible = Se.Settings.Appearance.ShowHorizontalLineAboveToolbar;
+ root.Children.Add(_vm.ToolbarTopSeparator.Dock(Dock.Top));
// Toolbar
_vm.Toolbar = InitToolbar.Make(_vm);
diff --git a/src/UI/Features/Main/MainViewModel.cs b/src/UI/Features/Main/MainViewModel.cs
index 8facdf97575..98f6d02b03c 100644
--- a/src/UI/Features/Main/MainViewModel.cs
+++ b/src/UI/Features/Main/MainViewModel.cs
@@ -319,6 +319,7 @@ public partial class MainViewModel :
private readonly IUndoRedoManager _undoRedoManager;
private readonly IBluRayHelper _bluRayHelper;
private readonly IMpvReloader _mpvReloader;
+ private readonly IVlcReloader _vlcReloader;
private readonly IFindService _findService;
private readonly IColorService _colorService;
private readonly IFontNameService _fontNameService;
@@ -334,6 +335,7 @@ public partial class MainViewModel :
public VideoPlayerControl? VideoPlayerControl { get; internal set; }
public Menu Menu { get; internal set; }
public Border Toolbar { get; internal set; }
+ public Separator? ToolbarTopSeparator { get; internal set; }
public StackPanel PanelSingleLineLengths { get; internal set; }
public MenuItem MenuItemMergeAsDialog { get; internal set; }
public MenuItem MenuItemExtendToLineBefore { get; internal set; }
@@ -378,6 +380,7 @@ public MainViewModel(
IUndoRedoManager undoRedoManager,
IBluRayHelper bluRayHelper,
IMpvReloader mpvReloader,
+ IVlcReloader vlcReloader,
IFindService findService,
IDictionaryInitializer dictionaryInitializer,
ILanguageInitializer languageInitializer,
@@ -400,6 +403,7 @@ public MainViewModel(
_undoRedoManager = undoRedoManager;
_bluRayHelper = bluRayHelper;
_mpvReloader = mpvReloader;
+ _vlcReloader = vlcReloader;
_findService = findService;
_colorService = colorService;
_fontNameService = fontNameService;
@@ -578,16 +582,13 @@ private void FirstLoad()
var languageCode = File.ReadAllText(setupLanguageFile).Trim();
var language = Iso639Dash2LanguageCode.List
.FirstOrDefault(p => languageCode.StartsWith(p.ThreeLetterCode, StringComparison.OrdinalIgnoreCase) ||
- languageCode.StartsWith(p.TwoLetterCode, StringComparison.OrdinalIgnoreCase));
+ languageCode.StartsWith(p.TwoLetterCode, StringComparison.OrdinalIgnoreCase));
if (language != null)
{
var translationFiles = Directory.GetFiles(Se.TranslationFolder, language.EnglishName + ".json");
if (translationFiles?.Length > 0)
{
- Dispatcher.UIThread.Post(async void () =>
- {
- await LoadLanguage(translationFiles[0]);
- });
+ Dispatcher.UIThread.Post(async void () => { await LoadLanguage(translationFiles[0]); });
}
}
}
@@ -777,7 +778,13 @@ private void SetLayout(int layoutNumber)
var idx = SubtitleGrid.SelectedIndex;
Se.Settings.General.LayoutNumber = InitLayout.MakeLayout(MainView!, this, layoutNumber);
SelectAndScrollToRow(Math.Max(0, idx));
+ RefreshSubtitlePreview();
+ }
+
+ private void RefreshSubtitlePreview()
+ {
_mpvReloader.Reset();
+ _vlcReloader.Reset();
_mpvPreviewDirty = true;
}
@@ -901,8 +908,17 @@ private async Task ShowAssaStyles()
{
ApplyAssaStyles(result);
_subtitle.Footer = result.ResultSubtitle.Footer;
- _mpvReloader.Reset();
- _mpvPreviewDirty = true;
+
+ var styles = AdvancedSubStationAlpha.GetStylesFromHeader(_subtitle.Header);
+ foreach (var s in Subtitles)
+ {
+ if (!styles.Contains(s.Style))
+ {
+ s.Style = styles.FirstOrDefault() ?? "Default";
+ }
+ }
+
+ RefreshSubtitlePreview();
}
}
@@ -931,8 +947,7 @@ public void ApplyAssaStyles(AssaStylesViewModel result)
}
}
- _mpvReloader.Reset();
- _mpvPreviewDirty = true;
+ RefreshSubtitlePreview();
}
[RelayCommand]
@@ -952,12 +967,10 @@ private async Task ShowAssaProperties()
if (result.OkPressed)
{
_subtitle.Header = result.Header;
- _mpvReloader.Reset();
- _mpvPreviewDirty = true;
+ RefreshSubtitlePreview();
}
}
-
[RelayCommand]
private async Task ShowAssaAttachments()
{
@@ -975,8 +988,7 @@ private async Task ShowAssaAttachments()
{
_subtitle.Header = result.Header;
_subtitle.Footer = result.Footer;
- _mpvReloader.Reset();
- _mpvPreviewDirty = true;
+ RefreshSubtitlePreview();
}
}
@@ -1036,14 +1048,14 @@ private async Task ShowAssaDraw()
{
insertIndex = Subtitles.Count;
}
+
Subtitles.Insert(insertIndex, newP);
lastParagraph = newP;
}
}
Renumber();
- _mpvReloader.Reset();
- _mpvPreviewDirty = true;
+ RefreshSubtitlePreview();
_updateAudioVisualizer = true;
}
@@ -1075,8 +1087,7 @@ private async Task ShowAssaGenerateProgressBar()
Renumber();
_updateAudioVisualizer = true;
- _mpvReloader.Reset();
- _mpvPreviewDirty = true;
+ RefreshSubtitlePreview();
}
[RelayCommand]
@@ -1095,8 +1106,7 @@ private async Task ShowAssaChangeResolution()
SetSubtitles(result.ResultSubtitle);
_subtitle.Header = result.ResultSubtitle.Header;
ShowStatus(Se.Language.Main.AssaResolutionResamplerDone);
- _mpvReloader.Reset();
- _mpvPreviewDirty = true;
+ RefreshSubtitlePreview();
}
[RelayCommand]
@@ -1133,8 +1143,7 @@ private async Task ShowAssaGenerateBackground()
_subtitle.Header = result.ResultSubtitle.Header;
SetSubtitles(result.ResultSubtitle);
- _mpvReloader.Reset();
- _mpvPreviewDirty = true;
+ RefreshSubtitlePreview();
}
[RelayCommand]
@@ -1157,8 +1166,7 @@ private async Task ShowAssaImageColorPicker()
vm.Initialize(_subtitle, selectedItem, _videoFileName, _mediaInfo?.Dimension.Width, _mediaInfo?.Dimension.Height);
});
- _mpvReloader.Reset();
- _mpvPreviewDirty = true;
+ RefreshSubtitlePreview();
}
[RelayCommand]
@@ -1189,8 +1197,7 @@ private async Task ShowAssaSetPosition()
var x = result.ResultX;
var y = result.ResultY;
selectedItem.Text = $"{{\\pos({x},{y})}}" + RemovePositionTags(selectedItem.Text);
- _mpvReloader.Reset();
- _mpvPreviewDirty = true;
+ RefreshSubtitlePreview();
}
private static string RemovePositionTags(string text)
@@ -1342,7 +1349,7 @@ private void ResetSubtitle(SubtitleFormat? format = null)
AutoFitColumns();
- _mpvReloader.Reset();
+ RefreshSubtitlePreview();
if (_findViewModel != null)
{
@@ -1368,10 +1375,8 @@ private void ResetSubtitle(SubtitleFormat? format = null)
vp.IsSmpteTimingEnabled = IsSmpteTimingEnabled;
}
- if (_mpvReloader != null)
- {
- _mpvReloader.SmpteMode = IsSmpteTimingEnabled;
- }
+ _mpvReloader.SmpteMode = IsSmpteTimingEnabled;
+ _vlcReloader.SmpteMode = IsSmpteTimingEnabled;
_formatChangedByUser = false;
_undoRedoManager.Reset();
@@ -1527,10 +1532,18 @@ private async Task OpenSecondarySubtitle()
IsSubtitleSecondaryVisible = true;
var vp = GetVideoPlayerControl();
- if (vp != null && vp.VideoPlayerInstance is LibMpvDynamicPlayer mpv)
+ if (vp != null)
{
- _mpvReloader.Reset();
- _ = _mpvReloader.RefreshMpv(mpv, GetUpdateSubtitle(), _subtitleSecondary, SelectedSubtitleFormat);
+ if (vp.VideoPlayerInstance is LibMpvDynamicPlayer mpv)
+ {
+ _mpvReloader.Reset();
+ _ = _mpvReloader.RefreshMpv(mpv, GetUpdateSubtitle(), _subtitleSecondary, SelectedSubtitleFormat);
+ }
+ else if (vp.VideoPlayerInstance is LibVlcDynamicPlayer vlc)
+ {
+ _vlcReloader.Reset();
+ _ = _vlcReloader.RefreshVlc(vlc, GetUpdateSubtitle(), _subtitleSecondary, SelectedSubtitleFormat);
+ }
}
}
@@ -1753,6 +1766,21 @@ private async Task OpenContainingFolder()
_shortcutManager.ClearKeys();
}
+ [RelayCommand]
+ private void ToggleCurrentSubtitleWhilePlaying()
+ {
+ SelectCurrentSubtitleWhilePlaying = !SelectCurrentSubtitleWhilePlaying;
+
+ if (SelectCurrentSubtitleWhilePlaying)
+ {
+ ShowStatus(Se.Language.Main.SelectCurrentSubtitleWhilePlayingOn);
+ }
+ else
+ {
+ ShowStatus(Se.Language.Main.SelectCurrentSubtitleWhilePlayingOff);
+ }
+ }
+
[RelayCommand]
private async Task CopySubtitlePathToClipboard()
{
@@ -2777,6 +2805,7 @@ private string AddSpaceBeforeUppercaseLetter(string spectrogramStyle)
{
sb.Append(' ');
}
+
sb.Append(c);
}
@@ -3187,6 +3216,7 @@ private async Task ColumnCopyTextFromOriginalToCurrent()
{
selectedItem.Text = selectedItem.OriginalText;
}
+
_undoRedoManager.StartChangeDetection();
_updateAudioVisualizer = true;
@@ -4181,7 +4211,7 @@ private async Task ShowToolsSplitBreakLongLines()
Subtitles.AddRange(result.AllSubtitlesFixed);
SelectAndScrollToRow(0);
_updateAudioVisualizer = true;
- _mpvReloader.Reset();
+ RefreshSubtitlePreview();
}
}
@@ -4209,7 +4239,7 @@ private async Task ShowToolsMergeShortLines()
Subtitles.AddRange(result.AllSubtitlesFixed);
SelectAndScrollToRow(0);
_updateAudioVisualizer = true;
- _mpvReloader.Reset();
+ RefreshSubtitlePreview();
}
}
@@ -4401,6 +4431,7 @@ private void VideoUndockControls()
});
InitLayout.MakeLayout12KeepVideo(MainView!, this);
+ RefreshSubtitlePreview();
});
}
@@ -4429,6 +4460,7 @@ private void VideoRedockControls()
if (!string.IsNullOrEmpty(videoFileName))
{
Dispatcher.UIThread.Post(async void () => { await VideoOpenFile(videoFileName); });
+ RefreshSubtitlePreview();
}
}
@@ -4928,10 +4960,8 @@ private void ToggleSmpteTiming()
vp.IsSmpteTimingEnabled = IsSmpteTimingEnabled;
}
- if (_mpvReloader != null)
- {
- _mpvReloader.SmpteMode = IsSmpteTimingEnabled;
- }
+ _mpvReloader.SmpteMode = IsSmpteTimingEnabled;
+ _vlcReloader.SmpteMode = IsSmpteTimingEnabled;
}
[RelayCommand]
@@ -5468,10 +5498,7 @@ private async Task ShowSyncChangeFrameRate()
return;
}
- var result = await ShowDialogAsync(vm =>
- {
- vm.Initialize(_videoFileName, _mediaInfo);
- });
+ var result = await ShowDialogAsync(vm => { vm.Initialize(_videoFileName, _mediaInfo); });
if (result.OkPressed)
{
ChangeFrameRateViewModel.ChangeFrameRate(Subtitles, result.SelectedFromFrameRate, result.SelectedToFrameRate);
@@ -5950,6 +5977,11 @@ public void ApplySettings()
UiUtil.SetFontName(Se.Settings.Appearance.FontName);
UiTheme.SetCurrentTheme();
+ if (ToolbarTopSeparator != null)
+ {
+ ToolbarTopSeparator.IsVisible = Se.Settings.Appearance.ShowHorizontalLineAboveToolbar;
+ }
+
if (Toolbar is Border toolbarBorder)
{
var tb = InitToolbar.Make(this);
@@ -6050,10 +6082,18 @@ public void ApplySettings()
_oldEditTextBox = EditTextBox;
var vp = GetVideoPlayerControl();
- if (vp != null && vp.VideoPlayerInstance is LibMpvDynamicPlayer mpv)
+ if (vp != null)
{
- _mpvReloader.Reset();
- _mpvReloader.RefreshMpv(mpv, GetUpdateSubtitle(), _subtitleSecondary, SelectedSubtitleFormat);
+ if (vp.VideoPlayerInstance is LibMpvDynamicPlayer mpv)
+ {
+ _mpvReloader.Reset();
+ _mpvReloader.RefreshMpv(mpv, GetUpdateSubtitle(), _subtitleSecondary, SelectedSubtitleFormat);
+ }
+ else if (vp.VideoPlayerInstance is LibVlcDynamicPlayer vlc)
+ {
+ _vlcReloader.Reset();
+ _vlcReloader.RefreshVlc(vlc, GetUpdateSubtitle(), _subtitleSecondary, SelectedSubtitleFormat);
+ }
}
if (Se.Settings.Appearance.RightToLeft)
@@ -6084,8 +6124,7 @@ public void ApplySettings()
p.Name == Se.Settings.General.DefaultSubtitleFormat) ?? SubtitleFormats[0];
}
- _mpvReloader.Reset();
- _mpvPreviewDirty = true;
+ RefreshSubtitlePreview();
}
public VideoPlayerControl? GetVideoPlayerControl()
@@ -6657,6 +6696,7 @@ private void InsertLineAtEnd()
Renumber();
SelectAndScrollToRow(lastIndex + 1);
}
+
_updateAudioVisualizer = true;
_undoRedoManager.StartChangeDetection();
@@ -8183,11 +8223,21 @@ private void VideoFullScreen()
_shortcutManager.ClearKeys();
var vp = GetVideoPlayerControl();
- if (vp != null && vp.VideoPlayerInstance is LibMpvDynamicPlayer mpv)
+ if (vp != null)
{
- _mpvReloader.Reset();
- _mpvReloader.RefreshMpv(mpv, GetUpdateSubtitle(), _subtitleSecondary, SelectedSubtitleFormat);
+ if (vp.VideoPlayerInstance is LibMpvDynamicPlayer mpv)
+ {
+ _mpvReloader.Reset();
+ _mpvReloader.RefreshMpv(mpv, GetUpdateSubtitle(), _subtitleSecondary, SelectedSubtitleFormat);
+ }
+ else if (vp.VideoPlayerInstance is LibVlcDynamicPlayer vlc)
+ {
+ _vlcReloader.Reset();
+ _vlcReloader.RefreshVlc(vlc, GetUpdateSubtitle(), _subtitleSecondary, SelectedSubtitleFormat);
+ }
}
+
+ RefreshSubtitlePreview();
}
[RelayCommand]
@@ -12193,8 +12243,7 @@ private async Task VideoOpenFile(string videoFileName) // OpenVideoFile
_videoOpenTokenSource?.Cancel();
await vp.Open(videoFileName);
_videoFileName = videoFileName;
- _mpvReloader.Reset();
- _mpvPreviewDirty = true;
+ RefreshSubtitlePreview();
if (IsValidUrl(videoFileName))
{
@@ -12671,7 +12720,7 @@ public int GetFastHash()
{
var p = Subtitles[i];
- hash = hash * 23 + p.Number;
+ hash = hash * 23 + p.Number;
hash = hash * 23 + p.StartTime.TotalMilliseconds.GetHashCode();
hash = hash * 23 + p.EndTime.TotalMilliseconds.GetHashCode();
@@ -12707,7 +12756,7 @@ public int GetFastHashOriginal()
{
var p = Subtitles[i];
- hash = hash * 23 + p.Number;
+ hash = hash * 23 + p.Number;
hash = hash * 23 + p.StartTime.TotalMilliseconds.GetHashCode();
hash = hash * 23 + p.EndTime.TotalMilliseconds.GetHashCode();
@@ -13796,6 +13845,7 @@ public void SubtitleGrid_PointerMoved(object? sender, PointerEventArgs e)
SubtitleGrid.SelectedItems.Add(Subtitles[i]);
}
}
+
_subtitleGridSelectionChangedSkip = false;
SubtitleGridSelectionChanged();
@@ -14116,6 +14166,7 @@ private void StartTimers()
{
SelectAndScrollToRow(idx + 1);
}
+
_setEndAtKeyUpLine = null;
_setEndAtKeyUpLineGoToNext = false;
}
@@ -14264,6 +14315,20 @@ private void StartTimers()
_mpvReloader.RefreshMpv(mpv, subtitle, _subtitleSecondary, SelectedSubtitleFormat).ConfigureAwait(false);
}
+ else if (_mpvPreviewDirty && vp?.VideoPlayerInstance is LibVlcDynamicPlayer vlc)
+ {
+ var subtitle = GetUpdateSubtitle();
+ _mpvPreviewDirty = false; // clear only after subtitle snapshot is successfully obtained
+ var hasVisibleLayers = _visibleLayers != null && Se.Settings.Assa.HideLayersFromVideoPreview;
+ if (hasVisibleLayers)
+ {
+ var paragraphs = subtitle.Paragraphs.Where(p => _visibleLayers!.Contains(p.Layer)).ToList();
+ subtitle.Paragraphs.Clear();
+ subtitle.Paragraphs.AddRange(paragraphs);
+ }
+
+ _vlcReloader.RefreshVlc(vlc, subtitle, _subtitleSecondary, SelectedSubtitleFormat).ConfigureAwait(false);
+ }
};
_slowTimer.Start();
}
diff --git a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrAddHistoryItem.cs b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrAddHistoryItem.cs
index ffb9d358747..0acb3da188a 100644
--- a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrAddHistoryItem.cs
+++ b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrAddHistoryItem.cs
@@ -6,14 +6,16 @@ namespace Nikse.SubtitleEdit.Features.Ocr.BinaryOcr;
public class BinaryOcrAddHistoryItem
{
public BinaryOcrBitmap BinaryOcrBitmap { get; set; }
- public NikseBitmap2? Bitmap { get; set; }
+ public NikseBitmap2? PreviewBitmap { get; set; }
+ public int PreviewTopMargin { get; set; }
public int LineIndex { get; set; }
public DateTime DateTime { get; set; }
- public BinaryOcrAddHistoryItem(BinaryOcrBitmap binaryOcrBitmap, NikseBitmap2? bitmap, int lineIndex)
+ public BinaryOcrAddHistoryItem(BinaryOcrBitmap binaryOcrBitmap, NikseBitmap2? previewBitmap, int previewTopMargin, int lineIndex)
{
BinaryOcrBitmap = binaryOcrBitmap;
- Bitmap = bitmap;
+ PreviewBitmap = previewBitmap == null ? null : new NikseBitmap2(previewBitmap);
+ PreviewTopMargin = previewTopMargin;
DateTime = DateTime.Now;
LineIndex = lineIndex;
}
diff --git a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrAddHistoryManager.cs b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrAddHistoryManager.cs
index cd1329956e9..4f6b7d7ab4f 100644
--- a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrAddHistoryManager.cs
+++ b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrAddHistoryManager.cs
@@ -12,14 +12,14 @@ public BinaryOcrAddHistoryManager()
Items = new List();
}
- public void Add(BinaryOcrBitmap binaryOcrBitmap, NikseBitmap2? letterBitmap, int lineIndex)
+ public void Add(BinaryOcrBitmap binaryOcrBitmap, NikseBitmap2? previewBitmap, int previewTopMargin, int lineIndex)
{
if (binaryOcrBitmap == null)
{
return;
}
- var item = new BinaryOcrAddHistoryItem(binaryOcrBitmap, letterBitmap, lineIndex);
+ var item = new BinaryOcrAddHistoryItem(binaryOcrBitmap, previewBitmap, previewTopMargin, lineIndex);
Items.Add(item);
}
diff --git a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrCharacterAddViewModel.cs b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrCharacterAddViewModel.cs
index 0323c51428c..8c857943428 100644
--- a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrCharacterAddViewModel.cs
+++ b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrCharacterAddViewModel.cs
@@ -37,6 +37,8 @@ public partial class BinaryOcrCharacterAddViewModel : ObservableObject
private ImageSplitterItem2 _splitItem;
public BinaryOcrBitmap? BinaryOcrBitmap { get; private set; }
+ public NikseBitmap2? PreviewBitmap { get; private set; }
+ public int PreviewTopMargin { get; private set; }
public TextBox TextBoxNew { get; set; }
public bool OkPressed { get; set; }
public bool AbortPressed { get; set; }
@@ -51,7 +53,6 @@ public partial class BinaryOcrCharacterAddViewModel : ObservableObject
private BinaryOcrDb _db;
private bool _isControlDown;
private bool _isWinDown;
- public BinaryOcrBitmap? FirstBinaryOcrBitmap { get; set; }
public BinaryOcrCharacterAddViewModel()
{
@@ -69,6 +70,8 @@ public BinaryOcrCharacterAddViewModel()
_splitItem = new ImageSplitterItem2(string.Empty);
TextBoxNew = new TextBox();
_nBmp = new NikseBitmap2(1, 1);
+ PreviewBitmap = null;
+ PreviewTopMargin = 0;
ShowSkip = true;
ShowUseOnce = true;
LoadSettings();
@@ -138,14 +141,15 @@ private void SetImages(OcrSubtitleItem? item, NikseBitmap2 nBmp)
if (_splitItem.NikseBitmap != null)
{
+ PreviewBitmap = _splitItem.NikseBitmap;
+ PreviewTopMargin = _splitItem.Top;
BinaryOcrBitmap = new BinaryOcrBitmap(_splitItem.NikseBitmap)
{
X = _splitItem.X,
Y = _splitItem.Top,
ExpandCount = 0,
};
- FirstBinaryOcrBitmap = BinaryOcrBitmap;
- ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, BinaryOcrBitmap.Width, BinaryOcrBitmap.Height, BinaryOcrBitmap.Y);
+ ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, PreviewBitmap.Width, PreviewBitmap.Height, PreviewTopMargin);
}
if (_splitItem.NikseBitmap != null)
@@ -156,61 +160,20 @@ private void SetImages(OcrSubtitleItem? item, NikseBitmap2 nBmp)
_splitItem.X + _splitItem.NikseBitmap.Width,
_splitItem.Y + _splitItem.NikseBitmap.Height);
- CurrentBitmap = _splitItem.NikseBitmap!.GetBitmap().ToAvaloniaBitmap();
+ CurrentBitmap = PreviewBitmap!.GetBitmap().ToAvaloniaBitmap();
if (_expandCount > 0)
{
- var minMarginTop = int.MaxValue;
- var minX = int.MaxValue;
- var minY = int.MaxValue;
- var maxX = 0;
- var maxY = 0;
-
- for (var i = _startFromNumber; i < _startFromNumber + _expandCount + 1 && i < _letters.Count; i++)
+ var expandedGroup = ExpandedOcrGroup.Create(_nBmp, _letters, _startFromNumber, _expandCount + 1);
+ if (expandedGroup != null)
{
- var letter = _letters[i];
- if (letter.NikseBitmap != null)
- {
- minMarginTop = Math.Min(minMarginTop, letter.Top);
- minX = Math.Min(minX, letter.X);
- minY = Math.Min(minY, letter.Y);
- maxX = Math.Max(maxX, letter.X + letter.NikseBitmap.Width);
- maxY = Math.Max(maxY, letter.Y + letter.NikseBitmap.Height);
- }
+ PreviewBitmap = expandedGroup.PreviewBitmap;
+ PreviewTopMargin = expandedGroup.PreviewTopMargin;
+ rect = expandedGroup.Bounds;
+ CurrentBitmap = PreviewBitmap.GetBitmap().ToAvaloniaBitmap();
+ BinaryOcrBitmap = expandedGroup.CreateBinaryOcrBitmap();
+ ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, PreviewBitmap.Width, PreviewBitmap.Height, PreviewTopMargin);
}
-
- rect = new SKRectI(minX, minY, maxX, maxY);
- var subset = new SKBitmap();
- if (!nBmp.GetBitmap().ExtractSubset(subset, rect))
- {
- throw new InvalidOperationException("Subset extraction failed.");
- }
- CurrentBitmap = subset.ToAvaloniaBitmap();
-
- var nikseBitmap = new NikseBitmap2(subset);
- BinaryOcrBitmap = new BinaryOcrBitmap(nikseBitmap)
- {
- X = minX,
- Y = minY,
- ExpandCount = _expandCount + 1,
- };
-
- // Build expanded list
- BinaryOcrBitmap.ExpandedList = new List();
- for (var j = 1; j <= _expandCount; j++)
- {
- if (_startFromNumber + j < _letters.Count && _letters[_startFromNumber + j].NikseBitmap != null)
- {
- var expandedBitmap = new BinaryOcrBitmap(_letters[_startFromNumber + j].NikseBitmap!)
- {
- X = _letters[_startFromNumber + j].X,
- Y = _letters[_startFromNumber + j].Top,
- };
- BinaryOcrBitmap.ExpandedList.Add(expandedBitmap);
- }
- }
-
- ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, BinaryOcrBitmap.Width, BinaryOcrBitmap.Height, BinaryOcrBitmap.Y);
}
using (var canvas = new SKCanvas(skBitmap))
@@ -462,4 +425,4 @@ internal void TextBoxMacPointerReleased(object? sender, PointerReleasedEventArgs
e.Handled = args.Handled;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrCharacterAddWindow.cs b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrCharacterAddWindow.cs
index 8c718c8dfa6..0c41abf849f 100644
--- a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrCharacterAddWindow.cs
+++ b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrCharacterAddWindow.cs
@@ -4,6 +4,7 @@
using Avalonia.Media;
using Nikse.SubtitleEdit.Logic;
using Nikse.SubtitleEdit.Logic.Config;
+using Nikse.SubtitleEdit.Logic.ValueConverters;
namespace Nikse.SubtitleEdit.Features.Ocr.BinaryOcr;
@@ -68,6 +69,8 @@ public BinaryOcrCharacterAddWindow(BinaryOcrCharacterAddViewModel vm)
vm.TextBoxNew.KeyDown += vm.TextBoxNewOnKeyDown;
vm.TextBoxNew.KeyUp += vm.TextBoxNewOnKeyUp;
vm.TextBoxNew.PointerReleased += vm.TextBoxMacPointerReleased;
+ vm.TextBoxNew.Bind(TextBox.FontStyleProperty, new Binding(nameof(vm.IsNewTextItalic)) { Converter = new BoolToFontStyleConverter() });
+
var menuFlyout = new MenuFlyout();
CharactersFlyoutMenuHelper.MakeFlyoutLetters(menuFlyout, vm.InsertSpecialCharacterCommand);
vm.TextBoxNew.ContextFlyout = menuFlyout;
diff --git a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrCharacterHistoryViewModel.cs b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrCharacterHistoryViewModel.cs
index 40256067986..bd3c680bf22 100644
--- a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrCharacterHistoryViewModel.cs
+++ b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrCharacterHistoryViewModel.cs
@@ -214,16 +214,23 @@ private void HistoryItemChanged()
return;
}
- if (selectedItem.Bitmap != null)
+ if (selectedItem.PreviewBitmap != null)
{
- CurrentBitmap = selectedItem.Bitmap.GetBitmap().ToAvaloniaBitmap();
+ CurrentBitmap = selectedItem.PreviewBitmap.GetBitmap().ToAvaloniaBitmap();
}
BinaryOcrBitmap = selectedItem.BinaryOcrBitmap;
IsNewTextItalic = BinaryOcrBitmap.Italic;
NewText = BinaryOcrBitmap.Text ?? string.Empty;
LineIndex = string.Format(Se.Language.Ocr.LineIndexX, selectedItem.LineIndex + 1);
- ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, BinaryOcrBitmap.Width, BinaryOcrBitmap.Height, BinaryOcrBitmap.Y);
+ if (BinaryOcrBitmap.ExpandCount > 1 && selectedItem.PreviewBitmap != null)
+ {
+ ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, selectedItem.PreviewBitmap.Width, selectedItem.PreviewBitmap.Height, selectedItem.PreviewTopMargin);
+ }
+ else
+ {
+ ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, BinaryOcrBitmap.Width, BinaryOcrBitmap.Height, BinaryOcrBitmap.Y);
+ }
}
internal void PointerWheelChanged(object? sender, PointerWheelEventArgs e)
@@ -242,4 +249,4 @@ internal void PointerWheelChanged(object? sender, PointerWheelEventArgs e)
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrDbEditViewModel.cs b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrDbEditViewModel.cs
index 616db1e76d0..fc8ec4c9911 100644
--- a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrDbEditViewModel.cs
+++ b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrDbEditViewModel.cs
@@ -1,5 +1,6 @@
using Avalonia.Controls;
using Avalonia.Input;
+using Avalonia.Media;
using Avalonia.Media.Imaging;
using Avalonia.Threading;
using CommunityToolkit.Mvvm.ComponentModel;
@@ -152,6 +153,11 @@ private void RefreshCharacters(string? selectCharacter)
}
+ partial void OnIsItemItalicChanged(bool value)
+ {
+ TextBoxItem.FontStyle = value ? FontStyle.Italic : FontStyle.Normal;
+ }
+
private void Close()
{
Dispatcher.UIThread.Post(() =>
diff --git a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrDbEditWindow.cs b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrDbEditWindow.cs
index 97debcd6763..644cd516385 100644
--- a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrDbEditWindow.cs
+++ b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrDbEditWindow.cs
@@ -3,6 +3,7 @@
using Avalonia.Data;
using Nikse.SubtitleEdit.Logic;
using Nikse.SubtitleEdit.Logic.Config;
+using Nikse.SubtitleEdit.Logic.ValueConverters;
namespace Nikse.SubtitleEdit.Features.Ocr.BinaryOcr;
@@ -117,6 +118,7 @@ private static Border MakeCurrentItemControlsView(BinaryOcrDbEditViewModel vm)
};
vm.TextBoxItem = UiUtil.MakeTextBox(100, vm, nameof(vm.ItemText));
+ vm.TextBoxItem.Bind(TextBox.FontStyleProperty, new Binding(nameof(vm.IsItemItalic)) { Converter = new BoolToFontStyleConverter() });
var image = new Image
{
diff --git a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrInspectViewModel.cs b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrInspectViewModel.cs
index 733d7146b44..136471ed716 100644
--- a/src/UI/Features/Ocr/BinaryOcr/BinaryOcrInspectViewModel.cs
+++ b/src/UI/Features/Ocr/BinaryOcr/BinaryOcrInspectViewModel.cs
@@ -55,6 +55,9 @@ public partial class BinaryOcrInspectViewModel : ObservableObject
private BinaryOcrDb _db;
private double _maxErrorPercent;
private NikseBitmap2 _nBmp;
+ private NikseBitmap2? _displayBitmap;
+ private SKRectI _displayBounds;
+ private int _displayTopMargin;
private OcrSubtitleItem? _ocrSubtitleItem;
private int _maxWrongPixels;
private BinaryOcrAddHistoryManager _binaryOcrAddHistoryManager;
@@ -129,9 +132,9 @@ internal void Initialize(
private void InitSentenceBitmap()
{
var skBitmap = _sentenceBitmapOriginal.Copy();
- if (_splitItem.NikseBitmap != null)
+ if (_displayBitmap != null)
{
- var rect = new SKRect(_splitItem.X, _splitItem.Y, _splitItem.X + _splitItem.NikseBitmap.Width, _splitItem.Y + _splitItem.NikseBitmap.Height);
+ var rect = new SKRect(_displayBounds.Left, _displayBounds.Top, _displayBounds.Right, _displayBounds.Bottom);
using (var canvas = new SKCanvas(skBitmap))
{
using (var paint = new SKPaint
@@ -263,8 +266,8 @@ private async Task AddBetterMatch()
if (addVm.OkPressed && addVm.BinaryOcrBitmap != null)
{
- var letterBitmap = _letters[LetterIndex].NikseBitmap;
- _binaryOcrAddHistoryManager.Add(addVm.BinaryOcrBitmap, letterBitmap, 0);
+ var previewBitmap = addVm.PreviewBitmap ?? _letters[LetterIndex].NikseBitmap;
+ _binaryOcrAddHistoryManager.Add(addVm.BinaryOcrBitmap, previewBitmap, addVm.PreviewTopMargin, 0);
_db.Add(addVm.BinaryOcrBitmap);
_ = Task.Run(_db.Save);
ReloadMatches();
@@ -386,22 +389,38 @@ private void OnLetterClicked(int index, BinaryOcrMatcher.CompareMatch? match)
{
LetterIndex = index;
_splitItem = _letters[index];
+ _displayBitmap = null;
+ _displayBounds = default;
+ _displayTopMargin = 0;
+ var expandedGroup = match is { ExpandCount: > 1 }
+ ? ExpandedOcrGroup.Create(_nBmp, _letters, index, match.ExpandCount)
+ : null;
IsEditControlsEnabled = match != null;
CanAddBetterMatch = match != null && match.ImageSplitterItem?.NikseBitmap != null;
if (_splitItem.NikseBitmap != null)
{
- var x = new BinaryOcrBitmap(_splitItem.NikseBitmap)
+ BinaryOcrBitmap x;
+ if (expandedGroup != null)
{
- X = _splitItem.X,
- Y = _splitItem.Top,
- Text = match?.Text ?? string.Empty,
- Italic = match?.Italic ?? false
- };
- CanAddBetterMatch = _db.FindExactMatch(x) < 0;
+ x = expandedGroup.CreateBinaryOcrBitmap();
+ }
+ else
+ {
+ x = new BinaryOcrBitmap(_splitItem.NikseBitmap);
+ }
+
+ x.X = _splitItem.X;
+ x.Y = _splitItem.Top;
+ x.Text = match?.Text ?? string.Empty;
+ x.Italic = match?.Italic ?? false;
+ CanAddBetterMatch = match is { ExpandCount: > 1 }
+ ? _db.FindExactMatchExpanded(x) < 0
+ : _db.FindExactMatch(x) < 0;
}
+ var matchResolution = string.Empty;
if (match != null && _splitItem.NikseBitmap != null)
{
// Try to find the actual BinaryOcrBitmap from the database
@@ -415,17 +434,9 @@ private void OnLetterClicked(int index, BinaryOcrMatcher.CompareMatch? match)
if (dbBitmap != null)
{
- MatchResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, dbBitmap.Width, dbBitmap.Height, dbBitmap.Y);
- }
- else
- {
- MatchResolutionAndTopMargin = string.Empty;
+ matchResolution = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, dbBitmap.Width, dbBitmap.Height, dbBitmap.Y);
}
}
- else
- {
- MatchResolutionAndTopMargin = string.Empty;
- }
if (_splitItem.NikseBitmap != null)
{
@@ -439,9 +450,30 @@ private void OnLetterClicked(int index, BinaryOcrMatcher.CompareMatch? match)
NewText = match?.Text ?? string.Empty;
IsNewTextItalic = match is { Italic: true };
- ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, _splitItem.NikseBitmap.Width, _splitItem.NikseBitmap.Height, _splitItem.Top);
+ _displayBitmap = _splitItem.NikseBitmap;
+ _displayBounds = new SKRectI(_splitItem.X, _splitItem.Y, _splitItem.X + _splitItem.NikseBitmap.Width, _splitItem.Y + _splitItem.NikseBitmap.Height);
+ _displayTopMargin = _splitItem.Top;
+
+ if (expandedGroup != null)
+ {
+ _displayBitmap = expandedGroup.PreviewBitmap;
+ _displayBounds = expandedGroup.Bounds;
+ _displayTopMargin = expandedGroup.PreviewTopMargin;
+ BinaryOcrBitmap = expandedGroup.CreateBinaryOcrBitmap();
+ BinaryOcrBitmap.Text = match?.Text ?? string.Empty;
+ BinaryOcrBitmap.Italic = match?.Italic ?? false;
+ }
+
+ ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, _displayBitmap.Width, _displayBitmap.Height, _displayTopMargin);
+ MatchResolutionAndTopMargin = expandedGroup != null
+ ? ResolutionAndTopMargin
+ : matchResolution;
- CurrentBitmap = _splitItem.NikseBitmap!.GetBitmap().ToAvaloniaBitmap();
+ CurrentBitmap = _displayBitmap.GetBitmap().ToAvaloniaBitmap();
+ }
+ else
+ {
+ MatchResolutionAndTopMargin = matchResolution;
}
InitSentenceBitmap();
diff --git a/src/UI/Features/Ocr/NOcr/NOcrAddHistoryItem.cs b/src/UI/Features/Ocr/NOcr/NOcrAddHistoryItem.cs
index a2090ce2be6..b077d313067 100644
--- a/src/UI/Features/Ocr/NOcr/NOcrAddHistoryItem.cs
+++ b/src/UI/Features/Ocr/NOcr/NOcrAddHistoryItem.cs
@@ -6,14 +6,14 @@ namespace Nikse.SubtitleEdit.Features.Ocr.NOcr;
public class NOcrAddHistoryItem
{
public NOcrChar NOcrChar { get; set; }
- public NikseBitmap2? Bitmap { get; set; }
+ public NikseBitmap2? PreviewBitmap { get; set; }
public int LineIndex { get; set; }
public DateTime DateTime { get; set; }
- public NOcrAddHistoryItem(NOcrChar nOcrChar, NikseBitmap2? bitmap, int lineIndex)
+ public NOcrAddHistoryItem(NOcrChar nOcrChar, NikseBitmap2? previewBitmap, int lineIndex)
{
NOcrChar = nOcrChar;
- Bitmap = bitmap;
+ PreviewBitmap = previewBitmap == null ? null : new NikseBitmap2(previewBitmap);
DateTime = DateTime.Now;
LineIndex = lineIndex;
}
diff --git a/src/UI/Features/Ocr/NOcr/NOcrAddHistoryManager.cs b/src/UI/Features/Ocr/NOcr/NOcrAddHistoryManager.cs
index 38c22472484..0dabfb83cd9 100644
--- a/src/UI/Features/Ocr/NOcr/NOcrAddHistoryManager.cs
+++ b/src/UI/Features/Ocr/NOcr/NOcrAddHistoryManager.cs
@@ -12,14 +12,14 @@ public NOcrAddHistoryManager()
Items = new List();
}
- public void Add(NOcrChar nOcrChar, NikseBitmap2? letterBitmap, int lineIndex)
+ public void Add(NOcrChar nOcrChar, NikseBitmap2? previewBitmap, int lineIndex)
{
if (nOcrChar == null)
{
return;
}
- var item = new NOcrAddHistoryItem(nOcrChar, letterBitmap, lineIndex);
+ var item = new NOcrAddHistoryItem(nOcrChar, previewBitmap, lineIndex);
Items.Add(item);
}
diff --git a/src/UI/Features/Ocr/NOcr/NOcrCharacterAddViewModel.cs b/src/UI/Features/Ocr/NOcr/NOcrCharacterAddViewModel.cs
index 0a8246d4b92..8a5fd1fda61 100644
--- a/src/UI/Features/Ocr/NOcr/NOcrCharacterAddViewModel.cs
+++ b/src/UI/Features/Ocr/NOcr/NOcrCharacterAddViewModel.cs
@@ -53,6 +53,7 @@ public partial class NOcrCharacterAddViewModel : ObservableObject
private ImageSplitterItem2 _splitItem;
public NOcrChar NOcrChar { get; private set; }
+ public NikseBitmap2? PreviewBitmap { get; private set; }
public NOcrDrawingCanvasView NOcrDrawingCanvas { get; set; }
public TextBox TextBoxNew { get; set; }
public bool OkPressed { get; set; }
@@ -99,6 +100,7 @@ public NOcrCharacterAddViewModel()
NOcrDrawingCanvas = new NOcrDrawingCanvasView();
TextBoxNew = new TextBox();
_nBmp = new NikseBitmap2(1, 1);
+ PreviewBitmap = null;
ShowSkip = true;
ShowUseOnce = true;
ShowAbort = true;
@@ -164,6 +166,7 @@ private void SetImages(OcrSubtitleItem? item, NikseBitmap2 nBmp)
if (_splitItem.NikseBitmap != null)
{
+ PreviewBitmap = _splitItem.NikseBitmap;
NOcrChar = new NOcrChar
{
Width = _splitItem.NikseBitmap.Width,
@@ -184,46 +187,19 @@ private void SetImages(OcrSubtitleItem? item, NikseBitmap2 nBmp)
_splitItem.X + _splitItem.NikseBitmap.Width,
_splitItem.Y + _splitItem.NikseBitmap.Height);
- CurrentBitmap = _splitItem.NikseBitmap!.GetBitmap().ToAvaloniaBitmap();
+ CurrentBitmap = PreviewBitmap!.GetBitmap().ToAvaloniaBitmap();
if (_expandCount > 0)
{
- var minMarginTop = int.MaxValue;
- var minX = int.MaxValue;
- var minY = int.MaxValue;
- var maxX = 0;
- var maxY = 0;
-
- for (var i = _startFromNumber; i < _startFromNumber + _expandCount + 1 && i < _letters.Count; i++)
- {
- var letter = _letters[i];
- if (letter.NikseBitmap != null)
- {
- minMarginTop = Math.Min(minMarginTop, letter.Top);
- minX = Math.Min(minX, letter.X);
- minY = Math.Min(minY, letter.Y);
- maxX = Math.Max(maxX, letter.X + letter.NikseBitmap.Width);
- maxY = Math.Max(maxY, letter.Y + letter.NikseBitmap.Height);
- }
- }
-
- rect = new SKRectI(minX, minY, maxX, maxY);
- var subset = new SKBitmap();
- if (!nBmp.GetBitmap().ExtractSubset(subset, rect))
+ var expandedGroup = ExpandedOcrGroup.Create(_nBmp, _letters, _startFromNumber, _expandCount + 1);
+ if (expandedGroup != null)
{
- throw new InvalidOperationException("Subset extraction failed.");
+ PreviewBitmap = expandedGroup.PreviewBitmap;
+ rect = expandedGroup.Bounds;
+ CurrentBitmap = PreviewBitmap.GetBitmap().ToAvaloniaBitmap();
+ NOcrChar = expandedGroup.CreateNOcrChar();
+ ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, NOcrChar.Width, NOcrChar.Height, NOcrChar.MarginTop);
}
- CurrentBitmap = subset.ToAvaloniaBitmap();
-
- NOcrChar = new NOcrChar
- {
- Width = subset.Width,
- Height = subset.Height,
- MarginTop = 0,
- ExpandCount = _expandCount + 1,
- };
-
- ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, NOcrChar.Width, NOcrChar.Height, NOcrChar.MarginTop);
}
NOcrDrawingCanvas.BackgroundImage = CurrentBitmap;
@@ -349,7 +325,12 @@ private void DrawAgain()
{
NOcrChar.LinesForeground.Clear();
NOcrChar.LinesBackground.Clear();
- NOcrChar.GenerateLineSegments(SelectedNoOfLinesToAutoDraw, false, NOcrChar, new NikseBitmap2(SkBitmapExtensions.ToSkBitmap(CurrentBitmap)));
+ if (PreviewBitmap == null)
+ {
+ return;
+ }
+
+ NOcrChar.GenerateLineSegments(SelectedNoOfLinesToAutoDraw, false, NOcrChar, PreviewBitmap);
ShowOcrPoints();
}
@@ -615,4 +596,4 @@ internal void TextBoxMacPointerReleased(object? sender, PointerReleasedEventArgs
e.Handled = args.Handled;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/UI/Features/Ocr/NOcr/NOcrCharacterHistoryViewModel.cs b/src/UI/Features/Ocr/NOcr/NOcrCharacterHistoryViewModel.cs
index f3aa057e103..cf777f63f7b 100644
--- a/src/UI/Features/Ocr/NOcr/NOcrCharacterHistoryViewModel.cs
+++ b/src/UI/Features/Ocr/NOcr/NOcrCharacterHistoryViewModel.cs
@@ -231,9 +231,9 @@ private void HistoryItemChanged()
return;
}
- if (selectedItem.Bitmap != null)
+ if (selectedItem.PreviewBitmap != null)
{
- CurrentBitmap = selectedItem.Bitmap.GetBitmap().ToAvaloniaBitmap();
+ CurrentBitmap = selectedItem.PreviewBitmap.GetBitmap().ToAvaloniaBitmap();
}
NOcrChar = selectedItem.NOcrChar;
@@ -265,4 +265,4 @@ internal void PointerWheelChanged(object? sender, PointerWheelEventArgs e)
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/UI/Features/Ocr/NOcr/NOcrInspectViewModel.cs b/src/UI/Features/Ocr/NOcr/NOcrInspectViewModel.cs
index 87fe103a3cd..f2655a5d9b9 100644
--- a/src/UI/Features/Ocr/NOcr/NOcrInspectViewModel.cs
+++ b/src/UI/Features/Ocr/NOcr/NOcrInspectViewModel.cs
@@ -61,6 +61,9 @@ public partial class NOcrInspectViewModel : ObservableObject
private NOcrDb _nOcrDb;
private int _maxWrongPixels;
private NikseBitmap2 _nBmp;
+ private NikseBitmap2? _displayBitmap;
+ private SKRect _displayRect;
+ private int _displayTopMargin;
private OcrSubtitleItem? _ocrSubtitleItem;
private NOcrAddHistoryManager _nOcrAddHistoryManager;
private bool _isControlDown = false;
@@ -96,6 +99,7 @@ public NOcrInspectViewModel()
_nOcrDb = new NOcrDb(string.Empty);
_nBmp = new NikseBitmap2(1, 1);
_nOcrAddHistoryManager = new NOcrAddHistoryManager();
+ _displayTopMargin = 0;
SentenceBitmap = new SKBitmap(1, 1, true).ToAvaloniaBitmap();
CurrentBitmap = new SKBitmap(1, 1, true).ToAvaloniaBitmap();
_splitItem = new ImageSplitterItem2(string.Empty);
@@ -131,9 +135,9 @@ internal void Initialize(SKBitmap sKBitmap, NikseBitmap2 nBmp, OcrSubtitleItem?
private void InitSentenceBitmap()
{
var skBitmap = _sentenceBitmapOriginal.Copy();
- if (_splitItem.NikseBitmap != null)
+ if (_displayBitmap != null)
{
- var rect = new SKRect(_splitItem.X, _splitItem.Y, _splitItem.X + _splitItem.NikseBitmap.Width, _splitItem.Y + _splitItem.NikseBitmap.Height);
+ var rect = _displayRect;
using (var canvas = new SKCanvas(skBitmap))
{
using (var paint = new SKPaint
@@ -189,10 +193,10 @@ private async Task Update()
item.Italic = IsNewTextItalic;
// Sync canvas lines back to NOcrChar (canvas stores bitmap-space coords, NOcrChar stores its own coord space)
- if (_splitItem.NikseBitmap != null)
+ if (_displayBitmap != null)
{
- var bitmapWidth = _splitItem.NikseBitmap.Width;
- var bitmapHeight = _splitItem.NikseBitmap.Height;
+ var bitmapWidth = _displayBitmap.Width;
+ var bitmapHeight = _displayBitmap.Height;
item.LinesForeground.Clear();
foreach (var line in NOcrDrawingCanvas.HitPaths)
@@ -289,8 +293,8 @@ private async Task AddBetterMatch()
if (addVm.OkPressed)
{
- var letterBitmap = _letters[LetterIndex].NikseBitmap;
- _nOcrAddHistoryManager.Add(addVm.NOcrChar, letterBitmap, 0);
+ var previewBitmap = addVm.PreviewBitmap ?? _letters[LetterIndex].NikseBitmap;
+ _nOcrAddHistoryManager.Add(addVm.NOcrChar, previewBitmap, 0);
_nOcrDb.Add(addVm.NOcrChar);
_ = Task.Run(_nOcrDb.Save);
ReloadMatches();
@@ -332,7 +336,12 @@ private void DrawAgain()
{
NOcrChar.LinesForeground.Clear();
NOcrChar.LinesBackground.Clear();
- NOcrChar.GenerateLineSegments(SelectedNoOfLinesToAutoDraw, false, NOcrChar, _splitItem.NikseBitmap!);
+ if (_displayBitmap == null)
+ {
+ return;
+ }
+
+ NOcrChar.GenerateLineSegments(SelectedNoOfLinesToAutoDraw, false, NOcrChar, _displayBitmap!);
ShowOcrPoints();
}
@@ -392,10 +401,10 @@ private void ShowOcrPoints()
NOcrDrawingCanvas.MissPaths.Clear();
NOcrDrawingCanvas.HitPaths.Clear();
- if (_splitItem.NikseBitmap != null)
+ if (_displayBitmap != null)
{
- var bitmapWidth = _splitItem.NikseBitmap.Width;
- var bitmapHeight = _splitItem.NikseBitmap.Height;
+ var bitmapWidth = _displayBitmap.Width;
+ var bitmapHeight = _displayBitmap.Height;
foreach (var line in NOcrChar.LinesForeground)
{
@@ -489,6 +498,7 @@ private void OnLetterClicked(int index, NOcrChar? match)
{
LetterIndex = index;
_splitItem = _letters[index];
+ _displayTopMargin = 0;
IsEditControlsEnabled = match != null;
@@ -512,9 +522,24 @@ private void OnLetterClicked(int index, NOcrChar? match)
NewText = match?.Text ?? string.Empty;
IsNewTextItalic = match is { Italic: true };
- ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, _splitItem.NikseBitmap.Width, _splitItem.NikseBitmap.Height, _splitItem.Top);
- CurrentBitmap = _splitItem.NikseBitmap!.GetBitmap().ToAvaloniaBitmap();
+ _displayBitmap = _splitItem.NikseBitmap;
+ _displayRect = new SKRect(_splitItem.X, _splitItem.Y, _splitItem.X + _splitItem.NikseBitmap.Width, _splitItem.Y + _splitItem.NikseBitmap.Height);
+ _displayTopMargin = _splitItem.Top;
+ if (match is { ExpandCount: > 1 })
+ {
+ var expandedGroup = ExpandedOcrGroup.Create(_nBmp, _letters, index, match.ExpandCount);
+ if (expandedGroup != null)
+ {
+ _displayBitmap = expandedGroup.PreviewBitmap;
+ _displayRect = new SKRect(expandedGroup.Bounds.Left, expandedGroup.Bounds.Top, expandedGroup.Bounds.Right, expandedGroup.Bounds.Bottom);
+ _displayTopMargin = expandedGroup.PreviewTopMargin;
+ }
+ }
+
+ ResolutionAndTopMargin = string.Format(Se.Language.Ocr.ResolutionXYAndTopmarginZ, _displayBitmap.Width, _displayBitmap.Height, _displayTopMargin);
+
+ CurrentBitmap = _displayBitmap!.GetBitmap().ToAvaloniaBitmap();
NOcrDrawingCanvas.BackgroundImage = CurrentBitmap;
if (match == null)
@@ -525,8 +550,8 @@ private void OnLetterClicked(int index, NOcrChar? match)
}
else
{
- var bitmapWidth = _splitItem.NikseBitmap.Width;
- var bitmapHeight = _splitItem.NikseBitmap.Height;
+ var bitmapWidth = _displayBitmap.Width;
+ var bitmapHeight = _displayBitmap.Height;
NOcrDrawingCanvas.HitPaths.Clear();
foreach (var line in match.LinesForeground)
@@ -677,4 +702,4 @@ internal void PointerWheelChanged(object? sender, PointerWheelEventArgs e)
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/UI/Features/Ocr/OcrViewModel.cs b/src/UI/Features/Ocr/OcrViewModel.cs
index f049cb48303..a4262972e1b 100644
--- a/src/UI/Features/Ocr/OcrViewModel.cs
+++ b/src/UI/Features/Ocr/OcrViewModel.cs
@@ -49,7 +49,6 @@
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
-using static Nikse.SubtitleEdit.Logic.Ocr.BinaryOcrMatcher;
namespace Nikse.SubtitleEdit.Features.Ocr;
@@ -1571,7 +1570,6 @@ private void RunPaddleOcr(List selectedIndices, OcrEngineType engineType, C
maxShownProgress = Math.Max(maxShownProgress, currentItemNumber);
UpdateOcrProgress(maxShownProgress, numberOfImages);
- var scrollToIndex = number;
var item = p.Item;
if (item == null)
{
@@ -1650,7 +1648,6 @@ private void RunGoogleLensOcr(List selectedIndices, CancellationToken cance
maxShownProgress = Math.Max(maxShownProgress, currentItemNumber);
UpdateOcrProgress(maxShownProgress, numberOfImages);
- var scrollToIndex = number;
var item = p.Item;
if (item == null)
{
@@ -1719,7 +1716,6 @@ private void RunGoogleLensOcrSharp(List selectedIndices, CancellationToken
maxShownProgress = Math.Max(maxShownProgress, currentItemNumber);
UpdateOcrProgress(maxShownProgress, numberOfImages);
- var scrollToIndex = number;
var item = p.Item;
if (item == null)
{
@@ -1858,8 +1854,8 @@ private async Task RunNOcrLoop(List selectedIndices, CancellationToken canc
if (result.OkPressed)
{
- var letterBitmap = letters[letterIndex].NikseBitmap;
- _nOcrAddHistoryManager.Add(result.NOcrChar, letterBitmap,
+ var previewBitmap = result.PreviewBitmap ?? letters[letterIndex].NikseBitmap;
+ _nOcrAddHistoryManager.Add(result.NOcrChar, previewBitmap,
OcrSubtitleItems.IndexOf(item));
IsInspectAdditionsVisible = true;
_nOcrDb.Add(result.NOcrChar);
@@ -1905,7 +1901,13 @@ await _windowService
}
else
{
- matches.Add(new NOcrChar { Text = _nOcrCaseFixer.FixUppercaseLowercaseIssues(splitterItem, match), Italic = match.Italic, ImageSplitterItem = splitterItem });
+ var inspectMatch = new NOcrChar(match)
+ {
+ Text = _nOcrCaseFixer.FixUppercaseLowercaseIssues(splitterItem, match),
+ ExpandCount = match.ExpandCount,
+ ImageSplitterItem = splitterItem,
+ };
+ matches.Add(inspectMatch);
}
}
@@ -1994,6 +1996,7 @@ await _windowService
}
}
+ RefreshSpellCheckColoring(i, item);
tcs.SetResult(true);
});
await tcs.Task;
@@ -2242,20 +2245,11 @@ await _windowService.ShowDialogAsync db.Save());
}
@@ -2362,6 +2356,7 @@ await _windowService
}
}
+ RefreshSpellCheckColoring(i, item);
tcs.SetResult(true);
});
await tcs.Task;
@@ -2375,6 +2370,17 @@ await _windowService
IsOcrRunning = false;
}
+ private void RefreshSpellCheckColoring(int lineIndex, OcrSubtitleItem item)
+ {
+ if (!_ocrFixEngine.IsLoaded() || SelectedDictionary == null || SelectedDictionary.Name == GetDictionaryNameNone())
+ {
+ return;
+ }
+
+ var updatedResult = _ocrFixEngine.FixOcrErrors(lineIndex, item, DoTryToGuessUnknownWords);
+ item.FixResult = updatedResult;
+ }
+
private static void ChangeWord(OcrSubtitleItem item, UnknownWordItem unknownWord, string word)
{
if (unknownWord.Word.FixedWord == word)
@@ -2407,7 +2413,7 @@ private static void ChangeWord(OcrSubtitleItem item, UnknownWordItem unknownWord
}
else
{
- Se.LogError($"OCR-repalce: Could not find word '{unknownWord.Word.FixedWord}' in text '{item.Text}' to replace with '{word}' at index {unknownWord.Word.WordIndex}");
+ Se.LogError($"OCR-replace: Could not find word '{unknownWord.Word.FixedWord}' in text '{item.Text}' to replace with '{word}' at index {unknownWord.Word.WordIndex}");
}
}
}
@@ -2648,7 +2654,69 @@ private void RunTesseractOcr(List selectedIndices, CancellationToken cancel
var text = await tesseractOcr.Ocr(bitmap, language, cancellationToken);
item.Text = text;
- OcrFixLineAndSetText(i, item);
+ var unknownWords = OcrFixLineAndSetText(i, item);
+
+ if (DoPromptForUnknownWords && unknownWords.Count > 0)
+ {
+ var tcs = new TaskCompletionSource();
+ Dispatcher.UIThread.Post(async () =>
+ {
+ foreach (var unknownWord in unknownWords)
+ {
+ var suggestions = _ocrFixEngine.GetSpellCheckSuggestions(unknownWord.Word.FixedWord);
+ var result = await _windowService.ShowDialogAsync(Window!,
+ vm => { vm.Initialize(item.GetBitmap(), item.Text, unknownWord, suggestions); });
+
+ if (result.ChangeWholeTextPressed)
+ {
+ item.Text = result.WholeText;
+ break;
+ }
+ else if (result.ChangeOncePressed)
+ {
+ ChangeWord(item, unknownWord, result.Word);
+ }
+ else if (result.ChangeAllPressed)
+ {
+ ChangeWord(item, unknownWord, result.Word);
+ _ocrFixEngine.ChangeAll(unknownWord.Word.Word, result.Word);
+ }
+ else if (result.SkipOncePressed)
+ {
+ // do nothing
+ }
+ else if (result.SkipAllPressed)
+ {
+ _ocrFixEngine.SkipAll(unknownWord.Word.Word);
+ }
+ else if (result.AddToNamesListPressed)
+ {
+ _ocrFixEngine.AddName(unknownWord.Word.Word);
+ }
+ else if (result.AddToUserDictionaryPressed)
+ {
+ if (SelectedDictionary != null)
+ {
+ UserWordsHelper.AddToUserDictionary(unknownWord.Word.Word, SelectedDictionary.GetFiveLetterLanguageName() ?? "en_US");
+ }
+ }
+ else
+ {
+ _cancellationTokenSource.Cancel();
+ IsOcrRunning = false;
+ break;
+ }
+ }
+
+ RefreshSpellCheckColoring(i, item);
+ tcs.SetResult(true);
+ });
+ await tcs.Task;
+ if (!IsOcrRunning)
+ {
+ return;
+ }
+ }
}
PauseOcr();
@@ -3468,4 +3536,4 @@ internal void DataGridSubtitleMacPointerReleased(object? sender, PointerReleased
e.Handled = true;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/UI/Features/Ocr/OcrWindow.cs b/src/UI/Features/Ocr/OcrWindow.cs
index f1a0ccdc433..a28e71f0ca0 100644
--- a/src/UI/Features/Ocr/OcrWindow.cs
+++ b/src/UI/Features/Ocr/OcrWindow.cs
@@ -12,6 +12,7 @@
using Nikse.SubtitleEdit.Logic.ValueConverters;
using Projektanker.Icons.Avalonia;
using System;
+using System.ComponentModel;
using Avalonia.Input;
using MenuItem = Avalonia.Controls.MenuItem;
@@ -68,7 +69,7 @@ public OcrWindow(OcrViewModel vm)
var savedHeight = (double)editViewHeight;
// Collapse row when OCR is running, restore when stopped
- vm.PropertyChanged += (s, e) =>
+ PropertyChangedEventHandler ocrRunningHandler = (s, e) =>
{
if (e.PropertyName == nameof(vm.IsOcrRunning))
{
@@ -88,6 +89,7 @@ public OcrWindow(OcrViewModel vm)
{
savedHeight = editViewRow.Height.Value;
}
+
// Use Auto to collapse (content is hidden via binding)
editViewRow.Height = new GridLength(1, GridUnitType.Auto);
editViewRow.MinHeight = 0;
@@ -107,11 +109,8 @@ public OcrWindow(OcrViewModel vm)
});
}
};
-
-
-
-
-
+ vm.PropertyChanged += ocrRunningHandler;
+ Closed += (_, _) => vm.PropertyChanged -= ocrRunningHandler;
// Set initial state if OCR is already running when window opens
if (vm.IsOcrRunning)
diff --git a/src/UI/Features/Options/Settings/SettingsPage.cs b/src/UI/Features/Options/Settings/SettingsPage.cs
index 1df44f770ff..54e35775494 100644
--- a/src/UI/Features/Options/Settings/SettingsPage.cs
+++ b/src/UI/Features/Options/Settings/SettingsPage.cs
@@ -565,6 +565,16 @@ private List CreateSections()
Mode = BindingMode.TwoWay,
}
}),
+ new SettingsItem(Se.Language.Options.Settings.SpellCheckEngine, () => new ComboBox
+ {
+ MinWidth = 200,
+ DataContext = _vm,
+ [!ItemsControl.ItemsSourceProperty] = new Binding(nameof(_vm.SpellCheckEngines)),
+ [!SelectingItemsControl.SelectedItemProperty] = new Binding(nameof(_vm.SelectedSpellCheckEngine))
+ {
+ Mode = BindingMode.TwoWay,
+ }
+ }),
MakeCheckboxSetting(Se.Language.Options.Settings.OcrUseWordSplitList, nameof(_vm.OcrUseWordSplitList)),
MakeCheckboxSetting(Se.Language.Options.Settings.SpeechToTextSelectedLinesPromptFistTimeOnly, nameof(_vm.SpeechToTextSelectedLinesPromptFistTimeOnly)),
MakeCheckboxSetting(Se.Language.Options.Settings.MultipleReplaceShowDotDotDotButtons, nameof(_vm.MultipleReplaceShowDotDotDotButtons)),
diff --git a/src/UI/Features/Options/Settings/SettingsViewModel.cs b/src/UI/Features/Options/Settings/SettingsViewModel.cs
index dd31902a17d..4dff9f5f607 100644
--- a/src/UI/Features/Options/Settings/SettingsViewModel.cs
+++ b/src/UI/Features/Options/Settings/SettingsViewModel.cs
@@ -19,6 +19,7 @@
using Nikse.SubtitleEdit.Features.Options.Settings.WaveformToolbarItems;
using Nikse.SubtitleEdit.Features.Shared;
using Nikse.SubtitleEdit.Features.Shared.PickSubtitleFormat;
+using Nikse.SubtitleEdit.Features.SpellCheck;
using Nikse.SubtitleEdit.Logic;
using Nikse.SubtitleEdit.Logic.Config;
using Nikse.SubtitleEdit.Logic.Media;
@@ -28,7 +29,6 @@
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
-using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using DownloadFfmpegViewModel = Nikse.SubtitleEdit.Features.Shared.DownloadFfmpegViewModel;
@@ -116,6 +116,8 @@ public partial class SettingsViewModel : ObservableObject
[ObservableProperty] private bool _speechToTextSelectedLinesPromptFistTimeOnly;
[ObservableProperty] private bool _multipleReplaceShowDotDotDotButtons;
[ObservableProperty] private bool _gridFocusTextboxAfterInsertNew;
+ [ObservableProperty] private ObservableCollection _spellCheckEngines;
+ [ObservableProperty] private string _selectedSpellCheckEngine;
[ObservableProperty] private bool _showUpDownStartTime;
[ObservableProperty] private bool _showUpDownEndTime;
@@ -448,6 +450,13 @@ public SettingsViewModel(IWindowService windowService, IFolderHelper folderHelpe
];
SelectedSplitOddNumberOfLinesAction = SplitOddNumberOfLinesActions[0];
+ SpellCheckEngines = [Se.Language.Options.Settings.SpellCheckEngineHunSpelll];
+ if (WordSpellCheck.IsWordInstalled())
+ {
+ SpellCheckEngines.Add(Se.Language.Options.Settings.SpellCheckEngineMsWord);
+ }
+ SelectedSpellCheckEngine = SpellCheckEngines[0];
+
WaveformSpaceInfo = string.Empty;
IsMpvChosen = true;
@@ -590,6 +599,7 @@ private void LoadSettings()
GoToLineNumberAlsoSetVideoPosition = Se.Settings.Tools.GoToLineNumberAlsoSetVideoPosition;
AdjustAllTimesRememberLineSelectionChoice = Se.Settings.Synchronization.AdjustAllTimesRememberLineSelectionChoice;
SelectedSplitOddNumberOfLinesAction = MapFromSplitOddActionToLanguageCode(Se.Settings.Tools.SplitOddLinesAction);
+ SelectedSpellCheckEngine = MapFromSpellCheckEngine(Se.Settings.SpellCheck.SpellCheckProvider);
OcrUseWordSplitList = Se.Settings.Ocr.UseWordSplitList;
SpeechToTextSelectedLinesPromptFistTimeOnly = Se.Settings.Tools.SpeechToTextSelectedLinesPromptFistTimeOnly;
MultipleReplaceShowDotDotDotButtons = Se.Settings.Tools.MultipleReplaceShowDotDotDotButtons;
@@ -858,6 +868,21 @@ private string GetTranslationModifierFromSetting(string modifier)
}
}
+ private static string MapFromSpellCheckEngine(string engine)
+ {
+ if (engine == SeSpellCheck.SpellCheckHunspell)
+ {
+ return Se.Language.Options.Settings.SpellCheckEngineHunSpelll;
+ }
+
+ if (engine == SeSpellCheck.SpellCheckMsWord)
+ {
+ return Se.Language.Options.Settings.SpellCheckEngineMsWord;
+ }
+
+ return Se.Language.Options.Settings.SpellCheckEngineHunSpelll;
+ }
+
private static string MapFromSplitOddActionToLanguageCode(string splitAction)
{
if (splitAction == nameof(SplitOddLinesActionType.WeightTop))
@@ -1160,6 +1185,7 @@ private void SaveSettings()
Se.Settings.Tools.GoToLineNumberAlsoSetVideoPosition = GoToLineNumberAlsoSetVideoPosition;
Se.Settings.Synchronization.AdjustAllTimesRememberLineSelectionChoice = AdjustAllTimesRememberLineSelectionChoice;
Se.Settings.Tools.SplitOddLinesAction = MapFromSplitOddActionTranslationToCode(SelectedSplitOddNumberOfLinesAction);
+ Se.Settings.SpellCheck.SpellCheckProvider = MapFromUISpellCheckEngineToCode(SelectedSpellCheckEngine);
Se.Settings.Ocr.UseWordSplitList = OcrUseWordSplitList;
Se.Settings.Tools.SpeechToTextSelectedLinesPromptFistTimeOnly = SpeechToTextSelectedLinesPromptFistTimeOnly;
Se.Settings.Tools.MultipleReplaceShowDotDotDotButtons = MultipleReplaceShowDotDotDotButtons;
@@ -1355,6 +1381,21 @@ private void SaveSettings()
Se.SaveSettings();
}
+ private string MapFromUISpellCheckEngineToCode(string spellCheckEngine)
+ {
+ if (spellCheckEngine == Se.Language.Options.Settings.SpellCheckEngineHunSpelll)
+ {
+ return SeSpellCheck.SpellCheckHunspell;
+ }
+
+ if (spellCheckEngine == Se.Language.Options.Settings.SpellCheckEngineMsWord)
+ {
+ return SeSpellCheck.SpellCheckMsWord;
+ }
+
+ return SeSpellCheck.SpellCheckHunspell;
+ }
+
private static string MapWaveformSingleClickFromTranslation(string selectedWaveformSingleClickActionType)
{
if (string.IsNullOrEmpty(selectedWaveformSingleClickActionType))
diff --git a/src/UI/Features/Options/Settings/SyntaxColorTooWideSettings/SyntaxColorTooWideSettingsWindow.cs b/src/UI/Features/Options/Settings/SyntaxColorTooWideSettings/SyntaxColorTooWideSettingsWindow.cs
index 693c0bc97bf..8d1a2825a2f 100644
--- a/src/UI/Features/Options/Settings/SyntaxColorTooWideSettings/SyntaxColorTooWideSettingsWindow.cs
+++ b/src/UI/Features/Options/Settings/SyntaxColorTooWideSettings/SyntaxColorTooWideSettingsWindow.cs
@@ -33,14 +33,14 @@ public SyntaxColorTooWideSettingsWindow(SyntaxColorTooWideSettingsViewModel vm)
numericFontSize.ValueChanged += (_, _) => vm.MarkPreviewDirty();
// Row 2 – max width
- var labelMaxWidth = UiUtil.MakeLabel("Max width (px):");
+ var labelMaxWidth = UiUtil.MakeLabel(Se.Language.General.MaxWidthPixels);
var numericMaxWidth = UiUtil.MakeNumericUpDownInt(10, 9999, 560, 120, vm, nameof(vm.MaxWidthPixels));
numericMaxWidth.ValueChanged += (_, _) => vm.MarkPreviewDirty();
// Row 3 – separator
// Row 4 – sample text
- var labelSampleText = UiUtil.MakeLabel("Sample text:");
+ var labelSampleText = UiUtil.MakeLabel(Se.Language.General.SampleText);
var textBoxSampleText = new TextBox
{
HorizontalAlignment = HorizontalAlignment.Stretch,
@@ -50,7 +50,7 @@ public SyntaxColorTooWideSettingsWindow(SyntaxColorTooWideSettingsViewModel vm)
textBoxSampleText.TextChanged += (_, _) => vm.MarkPreviewDirty();
// Row 5 – box width
- var labelBoxWidth = UiUtil.MakeLabel("Box width (px):");
+ var labelBoxWidth = UiUtil.MakeLabel(Se.Language.General.BoxWidthPixels);
var numericBoxWidth = UiUtil.MakeNumericUpDownInt(100, 9999, 720, 120, vm, nameof(vm.SampleBoxWidth));
numericBoxWidth.ValueChanged += (_, _) => vm.MarkPreviewDirty();
@@ -69,7 +69,7 @@ public SyntaxColorTooWideSettingsWindow(SyntaxColorTooWideSettingsViewModel vm)
// Row 7 – hint
var hint = new TextBlock
{
- Text = "Green lines = max-width limit | Red area = text exceeds limit",
+ Text = Se.Language.Options.Settings.PixelWidthInfo,
FontStyle = FontStyle.Italic,
Opacity = 0.65,
HorizontalAlignment = HorizontalAlignment.Left,
@@ -113,7 +113,6 @@ public SyntaxColorTooWideSettingsWindow(SyntaxColorTooWideSettingsViewModel vm)
grid.Add(numericFontSize, 1, 1);
grid.Add(labelMaxWidth, 2, 0);
grid.Add(numericMaxWidth, 2, 1);
- grid.Add(UiUtil.MakeVerticalSeperator(), 3, 0, 1, 2);
grid.Add(labelSampleText, 4, 0);
grid.Add(textBoxSampleText, 4, 1);
grid.Add(labelBoxWidth, 5, 0);
diff --git a/src/UI/Features/Options/Shortcuts/GetKeyViewModel.cs b/src/UI/Features/Options/Shortcuts/GetKeyViewModel.cs
index ce19ea84783..ae831267e74 100644
--- a/src/UI/Features/Options/Shortcuts/GetKeyViewModel.cs
+++ b/src/UI/Features/Options/Shortcuts/GetKeyViewModel.cs
@@ -3,6 +3,7 @@
using Avalonia.Input;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
+using Nikse.SubtitleEdit.Logic;
using Nikse.SubtitleEdit.Logic.Config;
namespace Nikse.SubtitleEdit.Features.Options.Shortcuts;
@@ -82,8 +83,9 @@ Key.LeftAlt or Key.RightAlt or
var shiftLabel = isMac ? Se.Language.Options.Shortcuts.ShiftMac : Se.Language.Options.Shortcuts.Shift;
var winLabel = isMac ? Se.Language.Options.Shortcuts.WinMac : Se.Language.Options.Shortcuts.Win;
- PressedKey = e.Key.ToString();
- PressedKeyOnly = PressedKey;
+ var effectiveKey = ShortcutManager.GetEffectiveKeyName(e.Key, e.PhysicalKey);
+ PressedKey = effectiveKey;
+ PressedKeyOnly = effectiveKey;
IsControlPressed = e.KeyModifiers.HasFlag(KeyModifiers.Control);
IsAltPressed = e.KeyModifiers.HasFlag(KeyModifiers.Alt);
IsShiftPressed = e.KeyModifiers.HasFlag(KeyModifiers.Shift);
@@ -119,8 +121,8 @@ Key.LeftAlt or Key.RightAlt or
infoText += winLabel + " + ";
}
- PressedKey += e.Key;
- infoText += e.Key;
+ PressedKey += effectiveKey;
+ infoText += effectiveKey;
InfoText = string.Format(Se.Language.Options.Shortcuts.PressedKeyX, infoText);
}
diff --git a/src/UI/Features/Shared/ColorPicker/ColorPickerViewModel.cs b/src/UI/Features/Shared/ColorPicker/ColorPickerViewModel.cs
index 3540e7f9f16..ea85c84f572 100644
--- a/src/UI/Features/Shared/ColorPicker/ColorPickerViewModel.cs
+++ b/src/UI/Features/Shared/ColorPicker/ColorPickerViewModel.cs
@@ -1,6 +1,5 @@
using Avalonia.Controls;
using Avalonia.Input;
-using Avalonia.Input.Platform;
using Avalonia.Media;
using Avalonia.Threading;
using CommunityToolkit.Mvvm.ComponentModel;
@@ -33,6 +32,8 @@ public partial class ColorPickerViewModel : ObservableObject
[ObservableProperty] private Color _alphaGradientStart = Colors.Transparent;
[ObservableProperty] private Color _alphaGradientEnd = Colors.White;
+ [ObservableProperty] private bool _showAlpha = true;
+
[ObservableProperty] private Color _lastColorPickerColor;
[ObservableProperty] private Color _lastColorPickerColor1;
[ObservableProperty] private Color _lastColorPickerColor2;
diff --git a/src/UI/Features/Shared/ColorPicker/ColorPickerWindow.cs b/src/UI/Features/Shared/ColorPicker/ColorPickerWindow.cs
index 685a432ea05..d04cc93bda7 100644
--- a/src/UI/Features/Shared/ColorPicker/ColorPickerWindow.cs
+++ b/src/UI/Features/Shared/ColorPicker/ColorPickerWindow.cs
@@ -214,6 +214,11 @@ private static StackPanel CreateSlidersPanel(ColorPickerViewModel vm)
Source = vm,
Path = nameof(vm.AlphaGradientEnd),
});
+ alphaSlider.Bind(ColorChannelSlider.IsVisibleProperty, new Binding
+ {
+ Source = vm,
+ Path = nameof(vm.ShowAlpha),
+ });
// Hex input
var hexLabel = new TextBlock
diff --git a/src/UI/Features/SpellCheck/ISpellCheckManager.cs b/src/UI/Features/SpellCheck/ISpellCheckManager.cs
index 6fe64c75735..6fbefc24892 100644
--- a/src/UI/Features/SpellCheck/ISpellCheckManager.cs
+++ b/src/UI/Features/SpellCheck/ISpellCheckManager.cs
@@ -20,4 +20,5 @@ public interface ISpellCheckManager
void AdToUserDictionary(string currentWord);
List GetDictionaryLanguages(string dictionaryFolder);
List GetSuggestions(string word);
+ WordSpellCheck? WordSpellChecker { get; set; }
}
diff --git a/src/UI/Features/SpellCheck/SpellCheckManager.cs b/src/UI/Features/SpellCheck/SpellCheckManager.cs
index 8ae5c5650e0..9f32a96fa26 100644
--- a/src/UI/Features/SpellCheck/SpellCheckManager.cs
+++ b/src/UI/Features/SpellCheck/SpellCheckManager.cs
@@ -17,6 +17,7 @@ public class SpellCheckManager : ISpellCheckManager, IDoSpell
public event SpellCheckWordChangedHandler? OnWordChanged;
public int NoOfChangedWords { get; set; }
public int NoOfSkippedWords { get; set; }
+ public WordSpellCheck? WordSpellChecker { get; set; }
private static readonly Regex EmailRegex = new(@"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$", RegexOptions.Compiled);
private static readonly Regex UrlRegex = new(@"^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$", RegexOptions.Compiled | RegexOptions.IgnoreCase);
@@ -144,6 +145,11 @@ public List CheckSpelling(ObservableCollection GetSuggestions(string word)
{
+ if (WordSpellChecker != null)
+ {
+ return WordSpellChecker.GetSuggestions(word);
+ }
+
if (_hunspellWeCantSpell == null)
{
return new List();
@@ -245,6 +251,11 @@ public void AdToUserDictionary(string word)
public bool IsWordCorrect(string word)
{
+ if (WordSpellChecker != null)
+ {
+ return WordSpellChecker.DoSpell(word);
+ }
+
return _hunspellWeCantSpell != null && _hunspellWeCantSpell.Check(word);
}
@@ -284,17 +295,18 @@ public bool IsWordCorrect(SpellCheckWord spellCheckWord, string text)
return true;
}
- var isCorrect = false;
- if (_hunspellWeCantSpell != null)
- {
- isCorrect = _hunspellWeCantSpell.Check(word);
- }
+ var isCorrect = DoSpell(word);
return isCorrect;
}
public bool DoSpell(string word)
{
+ if (WordSpellChecker != null)
+ {
+ return WordSpellChecker.DoSpell(word);
+ }
+
return _hunspellWeCantSpell != null && _hunspellWeCantSpell.Check(word);
}
@@ -340,11 +352,7 @@ private bool IsWordCorrect(SpellCheckWord spellCheckWord, SubtitleLineViewModel
return true;
}
- var isCorrect = false;
- if (_hunspellWeCantSpell != null)
- {
- isCorrect = _hunspellWeCantSpell.Check(word);
- }
+ var isCorrect = DoSpell(word);
if (_changeAllDictionary.ContainsKey(word) && NotSameSpecialEnding(words[wordIndex], _changeAllDictionary[word], text))
{
diff --git a/src/UI/Features/SpellCheck/SpellCheckViewModel.cs b/src/UI/Features/SpellCheck/SpellCheckViewModel.cs
index 23da21bc0c1..7018770dad7 100644
--- a/src/UI/Features/SpellCheck/SpellCheckViewModel.cs
+++ b/src/UI/Features/SpellCheck/SpellCheckViewModel.cs
@@ -54,6 +54,11 @@ public partial class SpellCheckViewModel : ObservableObject
public SpellCheckViewModel(ISpellCheckManager spellCheckManager, IWindowService windowService)
{
_spellCheckManager = spellCheckManager;
+ if (Se.Settings.SpellCheck.SpellCheckProvider == SeSpellCheck.SpellCheckMsWord && WordSpellCheck.IsWordInstalled())
+ {
+ _spellCheckManager.WordSpellChecker = new WordSpellCheck();
+ }
+
_spellCheckManager.OnWordChanged += (sender, e) =>
{
UpdateChangedWordInUi(e.FromWord, e.ToWord, e.WordIndex, e.Paragraph);
diff --git a/src/UI/Features/SpellCheck/WordSpellCheck.cs b/src/UI/Features/SpellCheck/WordSpellCheck.cs
new file mode 100644
index 00000000000..5930734654f
--- /dev/null
+++ b/src/UI/Features/SpellCheck/WordSpellCheck.cs
@@ -0,0 +1,221 @@
+using Microsoft.Win32;
+using Nikse.SubtitleEdit.Core.Interfaces;
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace Nikse.SubtitleEdit.Features.SpellCheck;
+
+public record WordSpellCheckLanguage(string Name, int LanguageId);
+
+public class WordSpellCheck : IDoSpell, IDisposable
+{
+ private dynamic? _wordApp;
+ private dynamic? _managedDocument;
+ private bool _disposed;
+ private WordSpellCheckLanguage? _currentLanguage;
+
+ public WordSpellCheckLanguage? CurrentLanguage
+ {
+ get => _currentLanguage;
+ set
+ {
+ _currentLanguage = value;
+
+ if (_wordApp == null || value == null)
+ {
+ return;
+ }
+
+ try
+ {
+ EnsureDocumentOpen();
+ _managedDocument!.Content.LanguageID = value.LanguageId;
+ }
+ catch
+ {
+ // ignored
+ }
+ }
+ }
+
+ public static bool IsWordInstalled()
+ {
+ if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ return false;
+ }
+
+ try
+ {
+ using var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe");
+ return key != null;
+ }
+ catch
+ {
+ return false;
+ }
+ }
+
+ public bool Initialize()
+ {
+ if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ return false;
+ }
+
+ try
+ {
+ var type = Type.GetTypeFromProgID("Word.Application");
+ if (type == null)
+ {
+ return false;
+ }
+
+ _wordApp = Activator.CreateInstance(type);
+ _wordApp!.Visible = false;
+ return true;
+ }
+ catch
+ {
+ return false;
+ }
+ }
+
+ public bool DoSpell(string word)
+ {
+ if (_wordApp == null || string.IsNullOrWhiteSpace(word))
+ {
+ return true;
+ }
+
+ try
+ {
+ return (bool)_wordApp!.CheckSpelling(word);
+ }
+ catch
+ {
+ return true;
+ }
+ }
+
+ public List GetInstalledLanguages()
+ {
+ var languages = new List();
+
+ if (_wordApp == null)
+ {
+ return languages;
+ }
+
+ try
+ {
+ EnsureDocumentOpen();
+
+ foreach (var language in _wordApp.Languages)
+ {
+ try
+ {
+ if (language.ActiveSpellingDictionary != null)
+ {
+ languages.Add(new WordSpellCheckLanguage((string)language.NameLocal, (int)language.ID));
+ }
+ }
+ catch
+ {
+ // ignored
+ }
+ }
+ }
+ catch
+ {
+ // ignored
+ }
+
+ return languages;
+ }
+
+ public List GetSuggestions(string word)
+ {
+ var suggestions = new List();
+
+ if (_wordApp == null || string.IsNullOrWhiteSpace(word))
+ {
+ return suggestions;
+ }
+
+ try
+ {
+ var spellingSuggestions = _wordApp!.GetSpellingSuggestions(word);
+ foreach (var suggestion in spellingSuggestions)
+ {
+ suggestions.Add((string)suggestion.Name);
+ }
+ }
+ catch
+ {
+ // ignored
+ }
+
+ return suggestions;
+ }
+
+ ///
+ /// Ensures a single tracked document is open, reusing it across calls
+ /// to avoid leaking orphaned Word documents.
+ ///
+ private void EnsureDocumentOpen()
+ {
+ if (_managedDocument != null)
+ {
+ return;
+ }
+
+ _managedDocument = _wordApp!.Documents.Add();
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (_disposed)
+ {
+ return;
+ }
+
+ if (_wordApp != null)
+ {
+ try
+ {
+ if (_managedDocument != null)
+ {
+ _managedDocument.Close(false); // false = don't save changes
+ Marshal.ReleaseComObject(_managedDocument);
+ _managedDocument = null;
+ }
+
+ _wordApp.Quit();
+ Marshal.ReleaseComObject(_wordApp);
+ }
+ catch
+ {
+ // ignored
+ }
+ finally
+ {
+ _wordApp = null;
+ }
+ }
+
+ _disposed = true;
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ ~WordSpellCheck()
+ {
+ Dispose(false);
+ }
+}
\ No newline at end of file
diff --git a/src/UI/Features/Sync/VisualSync/VisualSyncWindow.cs b/src/UI/Features/Sync/VisualSync/VisualSyncWindow.cs
index cc142810926..d45ee7be7f5 100644
--- a/src/UI/Features/Sync/VisualSync/VisualSyncWindow.cs
+++ b/src/UI/Features/Sync/VisualSync/VisualSyncWindow.cs
@@ -113,7 +113,7 @@ public VisualSyncWindow(VisualSyncViewModel vm)
{
new MenuItem
{
- Header = "Manual sync",
+ Header = Se.Language.General.ManualSync,
Command = vm.ManualSyncCommand,
},
},
diff --git a/src/UI/Features/Tools/AdjustDuration/AdjustDurationDisplay.cs b/src/UI/Features/Tools/AdjustDuration/AdjustDurationDisplay.cs
index 1e955b93bd6..7577d468090 100644
--- a/src/UI/Features/Tools/AdjustDuration/AdjustDurationDisplay.cs
+++ b/src/UI/Features/Tools/AdjustDuration/AdjustDurationDisplay.cs
@@ -1,3 +1,4 @@
+using Nikse.SubtitleEdit.Logic.Config;
using System.Collections.Generic;
namespace Nikse.SubtitleEdit.Features.Tools.AdjustDuration;
@@ -29,7 +30,7 @@ public static List ListAll()
[
new AdjustDurationDisplay
{
- Name = "Seconds",
+ Name = Se.Language.General.Seconds,
Type = AdjustDurationType.Seconds,
IsSecondsVisible = true,
IsPercentVisible = false,
@@ -38,7 +39,7 @@ public static List ListAll()
},
new AdjustDurationDisplay
{
- Name = "Percent",
+ Name = Se.Language.General.Percent,
Type = AdjustDurationType.Percent,
IsSecondsVisible = false,
IsPercentVisible = true,
@@ -47,7 +48,7 @@ public static List ListAll()
},
new AdjustDurationDisplay
{
- Name = "Fixed",
+ Name = Se.Language.Tools.AdjustDurations.Fixed,
Type = AdjustDurationType.Fixed,
IsSecondsVisible = false,
IsPercentVisible = false,
@@ -56,7 +57,7 @@ public static List ListAll()
},
new AdjustDurationDisplay
{
- Name = "Recalculate",
+ Name = Se.Language.Tools.AdjustDurations.Recalculate,
Type = AdjustDurationType.Recalculate,
IsSecondsVisible = false,
IsPercentVisible = false,
diff --git a/src/UI/Features/Tools/AdjustDuration/AdjustDurationViewModel.cs b/src/UI/Features/Tools/AdjustDuration/AdjustDurationViewModel.cs
index eb08b748d6c..affceb382c4 100644
--- a/src/UI/Features/Tools/AdjustDuration/AdjustDurationViewModel.cs
+++ b/src/UI/Features/Tools/AdjustDuration/AdjustDurationViewModel.cs
@@ -23,6 +23,7 @@ public partial class AdjustDurationViewModel : ObservableObject
[ObservableProperty] private double _adjustFixed;
[ObservableProperty] private double _adjustRecalculateMaxCharacterPerSecond;
[ObservableProperty] private double _adjustRecalculateOptimalCharacterPerSecond;
+ [ObservableProperty] private bool _extendOnly;
public Window? Window { get; set; }
@@ -51,7 +52,7 @@ public void AdjustDuration(ObservableCollection subtitles
}
else if (SelectedAdjustType.Type == AdjustDurationType.Recalculate)
{
- DoAdjustViaRecalculate(subtitles);
+ DoAdjustViaRecalculate(subtitles, ExtendOnly);
}
}
@@ -119,7 +120,7 @@ private void DoAdjustViaPercent(ObservableCollection subt
}
}
- private void DoAdjustViaRecalculate(ObservableCollection subtitles)
+ private void DoAdjustViaRecalculate(ObservableCollection subtitles, bool extendOnly)
{
for (int i = 0; i < subtitles.Count; i++)
{
@@ -135,8 +136,10 @@ private void DoAdjustViaRecalculate(ObservableCollection
var proposedEndTime = subtitle.StartTime + optimalDuration;
var fallbackEndTime = subtitle.StartTime + maxDuration;
+ var oldEndTime = subtitle.EndTime;
+
if (proposedEndTime <= maxEndTime)
- {
+ {
subtitle.EndTime = proposedEndTime;
}
else if (fallbackEndTime <= maxEndTime)
@@ -147,6 +150,11 @@ private void DoAdjustViaRecalculate(ObservableCollection
{
subtitle.EndTime = maxEndTime;
}
+
+ if (extendOnly && subtitle.EndTime < oldEndTime)
+ {
+ subtitle.EndTime = oldEndTime;
+ }
}
}
@@ -157,6 +165,7 @@ private void LoadSettings()
AdjustFixed = Se.Settings.Tools.AdjustDurations.AdjustDurationFixed;
AdjustRecalculateMaxCharacterPerSecond = Se.Settings.Tools.AdjustDurations.AdjustDurationMaximumCps;
AdjustRecalculateOptimalCharacterPerSecond = Se.Settings.Tools.AdjustDurations.AdjustDurationOptimalCps;
+ ExtendOnly = Se.Settings.Tools.AdjustDurations.AdjustDurationExtendOnly;
SelectedAdjustType = AdjustTypes.FirstOrDefault(p =>
p.Type.ToString() == Se.Settings.Tools.AdjustDurations.AdjustDurationLast)
@@ -171,6 +180,7 @@ private void SaveSettings()
Se.Settings.Tools.AdjustDurations.AdjustDurationFixed = AdjustFixed;
Se.Settings.Tools.AdjustDurations.AdjustDurationMaximumCps = AdjustRecalculateMaxCharacterPerSecond;
Se.Settings.Tools.AdjustDurations.AdjustDurationOptimalCps = AdjustRecalculateOptimalCharacterPerSecond;
+ Se.Settings.Tools.AdjustDurations.AdjustDurationExtendOnly = ExtendOnly;
Se.Settings.Tools.AdjustDurations.AdjustDurationLast = SelectedAdjustType.Type.ToString();
diff --git a/src/UI/Features/Tools/AdjustDuration/AdjustDurationWindow.cs b/src/UI/Features/Tools/AdjustDuration/AdjustDurationWindow.cs
index ec9e7bf0f7f..ca8b309fcfa 100644
--- a/src/UI/Features/Tools/AdjustDuration/AdjustDurationWindow.cs
+++ b/src/UI/Features/Tools/AdjustDuration/AdjustDurationWindow.cs
@@ -286,6 +286,7 @@ private static Grid MakeAdjustRecalculate(AdjustDurationViewModel vm)
{
new RowDefinition { Height = new GridLength(1, GridUnitType.Auto) },
new RowDefinition { Height = new GridLength(1, GridUnitType.Auto) },
+ new RowDefinition { Height = new GridLength(1, GridUnitType.Auto) },
},
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Center,
@@ -293,6 +294,19 @@ private static Grid MakeAdjustRecalculate(AdjustDurationViewModel vm)
Margin = new Thickness(10, 25, 0, 0),
};
+ var checkBoxExtendOnly = new CheckBox
+ {
+ Content = Se.Language.Tools.AdjustDurations.ExtendOnly,
+ VerticalAlignment = VerticalAlignment.Center,
+ Margin = new Thickness(10, 0, 0, 0),
+ };
+ checkBoxExtendOnly.Bind(CheckBox.IsCheckedProperty, new Binding
+ {
+ Path = nameof(vm.ExtendOnly),
+ Mode = BindingMode.TwoWay,
+ Source = vm,
+ });
+
grid.Children.Add(textBlockMax);
Grid.SetColumn(textBlockMax, 0);
@@ -307,6 +321,8 @@ private static Grid MakeAdjustRecalculate(AdjustDurationViewModel vm)
Grid.SetColumn(numericUpDownOptimal, 1);
Grid.SetRow(numericUpDownOptimal, 1);
+ grid.Add(checkBoxExtendOnly, 2, 1);
+
grid.Bind(Grid.IsVisibleProperty, new Binding
{
Path = $"{nameof(vm.SelectedAdjustType)}.{nameof(AdjustDurationDisplay.IsRecalculateVisible)}",
diff --git a/src/UI/Features/Tools/BatchConvert/BatchConvertViewModel.cs b/src/UI/Features/Tools/BatchConvert/BatchConvertViewModel.cs
index 97fd44e5d71..7767e0d358a 100644
--- a/src/UI/Features/Tools/BatchConvert/BatchConvertViewModel.cs
+++ b/src/UI/Features/Tools/BatchConvert/BatchConvertViewModel.cs
@@ -1013,7 +1013,7 @@ private bool AddFile(string fileName)
return false;
}
- if (format == Se.Language.General.Unknown && fileInfo.Length < 200_000)
+ if (format == Se.Language.General.Unknown && fileInfo.Length < 20_000_000)
{
subtitle = Subtitle.Parse(fileName);
if (subtitle != null)
@@ -1037,7 +1037,7 @@ private bool AddFile(string fileName)
}
}
- if (format == Se.Language.General.Unknown && fileInfo.Length < 300_000)
+ if (format == Se.Language.General.Unknown && fileInfo.Length < 20_000_000)
{
subtitle = Subtitle.Parse(fileName);
if (subtitle != null)
diff --git a/src/UI/Features/Tools/BatchConvert/BatchConverter.cs b/src/UI/Features/Tools/BatchConvert/BatchConverter.cs
index 03a182d33db..c391da87211 100644
--- a/src/UI/Features/Tools/BatchConvert/BatchConverter.cs
+++ b/src/UI/Features/Tools/BatchConvert/BatchConverter.cs
@@ -325,12 +325,6 @@ public async Task Convert(BatchConvertItem item, CancellationToken cancellationT
SaveSubtitleFormat(item, binaryPersistableSubtitle, format, cancellationToken);
return;
}
- else if (format is Ayato ayato) //TODO: make Ayato implement IBinaryPersistableSubtitle
- {
- var path = MakeOutputFileName(item, format.Extension);
- ayato.Save(path, string.Empty, item.Subtitle);
- return;
- }
await SaveSubtitleFormat(item, format, cancellationToken);
return;
diff --git a/src/UI/Features/Tools/BeautifyTimeCodes/BeautifyTimeCodesViewModel.cs b/src/UI/Features/Tools/BeautifyTimeCodes/BeautifyTimeCodesViewModel.cs
index df44a6ec12d..332f41a8334 100644
--- a/src/UI/Features/Tools/BeautifyTimeCodes/BeautifyTimeCodesViewModel.cs
+++ b/src/UI/Features/Tools/BeautifyTimeCodes/BeautifyTimeCodesViewModel.cs
@@ -6,7 +6,9 @@
using Nikse.SubtitleEdit.Logic;
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Linq;
+using System.Threading;
namespace Nikse.SubtitleEdit.Features.Tools.BeautifyTimeCodes;
@@ -18,13 +20,16 @@ public partial class BeautifyTimeCodesViewModel : ObservableObject, IDisposable
private readonly System.Timers.Timer _timerUpdatePreview;
private Avalonia.Threading.DispatcherTimer? _positionTimer;
- private bool _dirty;
+ private volatile bool _dirty;
+ private volatile bool _updateInProgress;
+ private readonly Lock _timerLock = new Lock();
private readonly List _allSubtitles;
private readonly List _originalSubtitles;
private readonly List _beautifiedSubtitles;
private List _shotChanges;
private double _frameRate = 25.0;
- private bool _disposed;
+ private volatile bool _disposed;
+ private readonly PropertyChangedEventHandler _settingsChangedHandler;
[ObservableProperty]
private BeautifySettings _settings;
@@ -44,25 +49,44 @@ public BeautifyTimeCodesViewModel()
_shotChanges = new List();
_timerUpdatePreview = new System.Timers.Timer(500);
+ _timerUpdatePreview.AutoReset = false;
_timerUpdatePreview.Elapsed += (s, e) =>
{
- _timerUpdatePreview.Stop();
- if (_dirty)
+ if (!_dirty || _updateInProgress)
{
+ _timerUpdatePreview.Start();
+ return;
+ }
+
+ lock (_timerLock)
+ {
+ if (!_dirty || _updateInProgress)
+ {
+ _timerUpdatePreview.Start();
+ return;
+ }
+
_dirty = false;
- UpdatePreview();
+ _updateInProgress = true;
}
- _timerUpdatePreview.Start();
+
+ UpdatePreview();
};
// Listen to settings changes
- Settings.PropertyChanged += (s, e) => { _dirty = true; };
+ _settingsChangedHandler = (s, e) => { _dirty = true; };
+ Settings.PropertyChanged += _settingsChangedHandler;
}
private void UpdatePreview()
{
if (AudioVisualizerBeautified == null || _allSubtitles.Count == 0)
{
+ _updateInProgress = false;
+ if (!_disposed)
+ {
+ _timerUpdatePreview.Start();
+ }
return;
}
@@ -73,27 +97,31 @@ private void UpdatePreview()
Avalonia.Threading.Dispatcher.UIThread.Post(() =>
{
- if (_disposed || AudioVisualizerBeautified == null)
+ if (!_disposed && AudioVisualizerBeautified != null)
{
- return;
+ // Reuse existing ViewModels and just update their properties
+ _beautifiedSubtitles.Clear();
+ var subRipFormat = new Core.SubtitleFormats.SubRip();
+ for (int i = 0; i < beautifiedParagraphs.Count; i++)
+ {
+ var p = beautifiedParagraphs[i];
+ var vm = new SubtitleLineViewModel(p, subRipFormat)
+ {
+ Number = i + 1
+ };
+ _beautifiedSubtitles.Add(vm);
+ }
+
+ // Update the beautified visualizer's paragraphs
+ AudioVisualizerBeautified.AllSelectedParagraphs = new List(_beautifiedSubtitles);
+ AudioVisualizerBeautified.InvalidateVisual();
}
- // Reuse existing ViewModels and just update their properties
- _beautifiedSubtitles.Clear();
- var subRipFormat = new Core.SubtitleFormats.SubRip();
- for (int i = 0; i < beautifiedParagraphs.Count; i++)
+ _updateInProgress = false;
+ if (!_disposed)
{
- var p = beautifiedParagraphs[i];
- var vm = new SubtitleLineViewModel(p, subRipFormat)
- {
- Number = i + 1
- };
- _beautifiedSubtitles.Add(vm);
+ _timerUpdatePreview.Start();
}
-
- // Update the beautified visualizer's paragraphs
- AudioVisualizerBeautified.AllSelectedParagraphs = new List(_beautifiedSubtitles);
- AudioVisualizerBeautified.InvalidateVisual();
});
}
@@ -196,6 +224,7 @@ private void StopPositionTimer()
private void Ok()
{
StopPositionTimer();
+ _timerUpdatePreview.Stop();
// Apply final beautification
var paragraphs = _allSubtitles.Select(p => p.Paragraph!).OrderBy(p => p.StartTime.TotalMilliseconds).ToList();
@@ -217,6 +246,7 @@ private void Ok()
private void Cancel()
{
StopPositionTimer();
+ _timerUpdatePreview.Stop();
Window?.Close();
}
@@ -230,7 +260,7 @@ internal void OnKeyDown(KeyEventArgs e)
if (e.Key == Key.Escape)
{
e.Handled = true;
- Window?.Close();
+ Cancel();
}
else if (UiUtil.IsHelp(e))
{
@@ -251,10 +281,11 @@ public void Dispose()
return;
}
- StopPositionTimer();
- _timerUpdatePreview?.Stop();
- _timerUpdatePreview?.Dispose();
-
_disposed = true;
+
+ Settings.PropertyChanged -= _settingsChangedHandler;
+ StopPositionTimer();
+ _timerUpdatePreview.Stop();
+ _timerUpdatePreview.Dispose();
}
}
\ No newline at end of file
diff --git a/src/UI/Features/Tools/FixNetflixErrors/FixNetflixErrorsViewModel.cs b/src/UI/Features/Tools/FixNetflixErrors/FixNetflixErrorsViewModel.cs
index a41b6a9cdb0..4d48d8dabef 100644
--- a/src/UI/Features/Tools/FixNetflixErrors/FixNetflixErrorsViewModel.cs
+++ b/src/UI/Features/Tools/FixNetflixErrors/FixNetflixErrorsViewModel.cs
@@ -111,33 +111,11 @@ private void LoadChecks()
Checks.Clear();
foreach (var checker in NetflixQualityController.GetAllCheckers())
{
- var name = GetFriendlyCheckerName(checker.GetType().Name);
+ var name = checker.Name;
Checks.Add(new NetflixCheckDisplayItem(checker, name, true));
}
}
- private static string GetFriendlyCheckerName(string typeName)
- {
- // Remove common prefix
- if (typeName.StartsWith("NetflixCheck", StringComparison.Ordinal))
- {
- typeName = typeName.Substring("NetflixCheck".Length);
- }
-
- // Insert spaces before capitals
- var chars = new List();
- for (int i = 0; i < typeName.Length; i++)
- {
- var c = typeName[i];
- if (i > 0 && char.IsUpper(c) && (char.IsLower(typeName[i - 1]) || (i + 1 < typeName.Length && char.IsLower(typeName[i + 1]))))
- {
- chars.Add(' ');
- }
- chars.Add(c);
- }
- return new string(chars.ToArray());
- }
-
private void LoadSettings()
{
}
diff --git a/src/UI/Features/Tools/MergeShortLines/MergeShortLinesHelper.cs b/src/UI/Features/Tools/MergeShortLines/MergeShortLinesHelper.cs
index e14cbf9e630..0c9f54a4145 100644
--- a/src/UI/Features/Tools/MergeShortLines/MergeShortLinesHelper.cs
+++ b/src/UI/Features/Tools/MergeShortLines/MergeShortLinesHelper.cs
@@ -97,7 +97,7 @@ public static MergeShortLinesResult Merge(
var fix = new MergeShortLinesItem(
Se.Language.Tools.MergeShortLines.Title,
index + 1,
- $"Merged line {j + 1} into {index + 1} - {current.Text.Replace(Environment.NewLine, " ⏎ ")}",
+ string.Format(Se.Language.Tools.MergeShortLines.MergedLineInfo, j + 1, index + 1, current.Text.Replace(Environment.NewLine, " ⏎ ")),
new SubtitleLineViewModel(current));
fixes.Add(fix);
diff --git a/src/UI/Features/Tools/MergeShortLines/MergeShortLinesViewModel.cs b/src/UI/Features/Tools/MergeShortLines/MergeShortLinesViewModel.cs
index 980bb353d7d..220b3c1366f 100644
--- a/src/UI/Features/Tools/MergeShortLines/MergeShortLinesViewModel.cs
+++ b/src/UI/Features/Tools/MergeShortLines/MergeShortLinesViewModel.cs
@@ -107,7 +107,7 @@ private void UpdatePreview()
}
else
{
- FixesInfo = $"Lines merged: {mergeResult.MergeCount}";
+ FixesInfo = string.Format(Se.Language.Tools.MergeShortLines.LinesMergedX, mergeResult.MergeCount);
}
});
}
diff --git a/src/UI/Features/Tools/RemoveTextForHearingImpaired/RemoveTextForHearingImpairedViewModel.cs b/src/UI/Features/Tools/RemoveTextForHearingImpaired/RemoveTextForHearingImpairedViewModel.cs
index 8ae37181c8c..02f582eb900 100644
--- a/src/UI/Features/Tools/RemoveTextForHearingImpaired/RemoveTextForHearingImpairedViewModel.cs
+++ b/src/UI/Features/Tools/RemoveTextForHearingImpaired/RemoveTextForHearingImpairedViewModel.cs
@@ -77,8 +77,6 @@ public static List GetAll()
private Subtitle _subtitle;
private RemoveTextForHI? _removeTextForHiLib;
private readonly Timer _timer;
- private readonly List _edited;
-
private readonly IWindowService _windowService;
public RemoveTextForHearingImpairedViewModel(IWindowService windowService)
@@ -91,7 +89,6 @@ public RemoveTextForHearingImpairedViewModel(IWindowService windowService)
Languages = new ObservableCollection(LanguageItem.GetAll());
Fixes = new ObservableCollection();
FixText = string.Empty;
- _edited = new List();
_timer = new Timer(500);
_timer.Elapsed += TimerElapsed;
FixedSubtitle = new Subtitle();
@@ -232,45 +229,22 @@ private void GeneratePreview()
var skipList = interjections?.SkipStartList ?? new List();
_removeTextForHiLib.ReloadInterjection(list, skipList);
- var count = 0;
var newFixes = new List();
+ var twoLetterIsoLanguageName = SelectedLanguage == null ? "en" : SelectedLanguage.Code;
for (var index = 0; index < _subtitle.Paragraphs.Count; index++)
{
var p = _subtitle.Paragraphs[index];
_removeTextForHiLib.WarningIndex = index - 1;
- if (_edited.Contains(p))
+ var newText = _removeTextForHiLib.RemoveTextFromHearImpaired(p.Text, _subtitle, index, twoLetterIsoLanguageName);
+ if (p.Text.RemoveChar(' ') != newText.RemoveChar(' '))
{
- var editedParagraph = _edited.First(x => x.Id == p.Id);
- var newText = editedParagraph.Text;
-
var apply = true;
var oldItem = Fixes.FirstOrDefault(f => f.Index == index);
if (oldItem != null)
{
apply = oldItem.Apply;
}
-
- var item = new RemoveItem(apply, index, p.Text, newText, p);
- newFixes.Add(item);
- count++;
- }
- else
- {
- var newText = _removeTextForHiLib.RemoveTextFromHearImpaired(p.Text, _subtitle, index,
- SelectedLanguage == null ? "en" : SelectedLanguage.Code);
- if (p.Text.RemoveChar(' ') != newText.RemoveChar(' '))
- {
- var apply = true;
- var oldItem = Fixes.FirstOrDefault(f => f.Index == index);
- if (oldItem != null)
- {
- apply = oldItem.Apply;
- }
-
- var item = new RemoveItem(apply, index, p.Text, newText, p);
- newFixes.Add(item);
- count++;
- }
+ newFixes.Add(new RemoveItem(apply, index, p.Text, newText, p));
}
}
diff --git a/src/UI/Features/Translate/TranslateSettingsViewModel.cs b/src/UI/Features/Translate/TranslateSettingsViewModel.cs
index 479f1a87813..e31c915363d 100644
--- a/src/UI/Features/Translate/TranslateSettingsViewModel.cs
+++ b/src/UI/Features/Translate/TranslateSettingsViewModel.cs
@@ -143,8 +143,8 @@ public void LoadValues(IAutoTranslator translator)
MergeOptions = new ObservableCollection
{
- "Default",
- "Translate each line separately",
+ Se.Language.General.Default,
+ Se.Language.Translate.TranslateEachLineSeparately,
};
SelectedMergeOptions = MergeOptions[0];
diff --git a/src/UI/Features/Video/BurnIn/BurnInEffectItem.cs b/src/UI/Features/Video/BurnIn/BurnInEffectItem.cs
index de5d260d1a6..40f3566c30d 100644
--- a/src/UI/Features/Video/BurnIn/BurnInEffectItem.cs
+++ b/src/UI/Features/Video/BurnIn/BurnInEffectItem.cs
@@ -1,4 +1,5 @@
using Nikse.SubtitleEdit.Core.Common;
+using Nikse.SubtitleEdit.Logic.Config;
using System;
namespace Nikse.SubtitleEdit.Features.Video.BurnIn;
@@ -76,15 +77,15 @@ public static BurnInEffectItem[] List()
{
return
[
- new BurnInEffectItem("Fix right-to-left", BurnInEffectType.FixRightToLeft),
- new BurnInEffectItem("Fade in/out", BurnInEffectType.FadeInOut),
- new BurnInEffectItem("Font size change", BurnInEffectType.SlowFontSizeChange),
- new BurnInEffectItem("Increase font kerning", BurnInEffectType.IncreaseFontKerning),
- new BurnInEffectItem("Scroll up", BurnInEffectType.SrollUp),
- new BurnInEffectItem("Scroll down", BurnInEffectType.ScrollDown),
- new BurnInEffectItem("Rotate in", BurnInEffectType.RotateIn),
- new BurnInEffectItem("Tilt bounce", BurnInEffectType.TiltBounce),
- new BurnInEffectItem("Font size bounce in", BurnInEffectType.FontSizeBounceIn)
+ new BurnInEffectItem(Se.Language.General.FixRightToLeft, BurnInEffectType.FixRightToLeft),
+ new BurnInEffectItem(Se.Language.General.FadeInOut, BurnInEffectType.FadeInOut),
+ new BurnInEffectItem(Se.Language.Tools.BatchConvert.SlowFontSizeChange, BurnInEffectType.SlowFontSizeChange),
+ new BurnInEffectItem(Se.Language.Tools.BatchConvert.IncreaseFontKerning, BurnInEffectType.IncreaseFontKerning),
+ new BurnInEffectItem(Se.Language.Tools.BatchConvert.ScrollUp, BurnInEffectType.SrollUp),
+ new BurnInEffectItem(Se.Language.Tools.BatchConvert.ScrollDown, BurnInEffectType.ScrollDown),
+ new BurnInEffectItem(Se.Language.Tools.BatchConvert.RotateIn, BurnInEffectType.RotateIn),
+ new BurnInEffectItem(Se.Language.Tools.BatchConvert.TiltBounce, BurnInEffectType.TiltBounce),
+ new BurnInEffectItem(Se.Language.Tools.BatchConvert.FontSizeBounceIn, BurnInEffectType.FontSizeBounceIn)
];
}
}
\ No newline at end of file
diff --git a/src/UI/Features/Video/BurnIn/BurnInLogoWindow.cs b/src/UI/Features/Video/BurnIn/BurnInLogoWindow.cs
index 13050c77974..14e0317f61a 100644
--- a/src/UI/Features/Video/BurnIn/BurnInLogoWindow.cs
+++ b/src/UI/Features/Video/BurnIn/BurnInLogoWindow.cs
@@ -59,7 +59,7 @@ public BurnInLogoWindow(BurnInLogoViewModel vm)
var labelLogoPosition = UiUtil.MakeLabel().WithBindText(vm, nameof(vm.LogoPositionText));
// Alpha slider
- var labelAlpha = UiUtil.MakeLabel("Alpha:");
+ var labelAlpha = UiUtil.MakeLabel(Se.Language.General.Alpha);
labelAlpha.VerticalAlignment = VerticalAlignment.Center;
labelAlpha.Margin = new Thickness(20, 0, 5, 0);
@@ -80,7 +80,7 @@ public BurnInLogoWindow(BurnInLogoViewModel vm)
labelAlphaValue[!TextBlock.TextProperty] = new Binding("BurnInLogo.Alpha") { StringFormat = "{0}%" };
// Logo size slider
- var labelSize = UiUtil.MakeLabel("Size:");
+ var labelSize = UiUtil.MakeLabel(Se.Language.General.Size);
labelSize.VerticalAlignment = VerticalAlignment.Center;
labelSize.Margin = new Thickness(20, 0, 5, 0);
@@ -220,7 +220,7 @@ public BurnInLogoWindow(BurnInLogoViewModel vm)
};
// Instructions label
- var instructionsLabel = UiUtil.MakeLabel("Pick a PNG image and drag it to position it on the video.");
+ var instructionsLabel = UiUtil.MakeLabel(Se.Language.Video.BurnIn.LogoInfo);
// Buttons
var buttonOk = UiUtil.MakeButtonOk(vm.OkCommand);
diff --git a/src/UI/Features/Video/BurnIn/BurnInResolutionPickerWindow.cs b/src/UI/Features/Video/BurnIn/BurnInResolutionPickerWindow.cs
index 3d5aa401e8b..844b43ccb3b 100644
--- a/src/UI/Features/Video/BurnIn/BurnInResolutionPickerWindow.cs
+++ b/src/UI/Features/Video/BurnIn/BurnInResolutionPickerWindow.cs
@@ -6,6 +6,7 @@
using Avalonia.Layout;
using Avalonia.Styling;
using Nikse.SubtitleEdit.Logic;
+using Nikse.SubtitleEdit.Logic.Config;
namespace Nikse.SubtitleEdit.Features.Video.BurnIn;
@@ -16,7 +17,7 @@ public class BurnInResolutionPickerWindow : Window
public BurnInResolutionPickerWindow(BurnInResolutionPickerViewModel vm)
{
UiUtil.InitializeWindow(this, GetType().Name);
- Title = "Pick resolution";
+ Title = Se.Language.General.PickResolution;
SizeToContent = SizeToContent.WidthAndHeight;
MaxHeight = 900;
CanResize = false;
diff --git a/src/UI/Features/Video/TextToSpeech/TextToSpeechViewModel.cs b/src/UI/Features/Video/TextToSpeech/TextToSpeechViewModel.cs
index fb168d62c4c..26a246ebc23 100644
--- a/src/UI/Features/Video/TextToSpeech/TextToSpeechViewModel.cs
+++ b/src/UI/Features/Video/TextToSpeech/TextToSpeechViewModel.cs
@@ -652,8 +652,8 @@ await Dispatcher.UIThread.InvokeAsync(async () =>
{
var answer = await MessageBox.Show(
Window,
- "Download Piper?",
- $"{Environment.NewLine}\"Text to speech\" requires Piper.{Environment.NewLine}{Environment.NewLine}Download and use Piper?",
+ string.Format(Se.Language.General.DownloadX, "Piper"),
+ Se.Language.Video.TextToSpeech.DownloadPiperPrompt,
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Question);
diff --git a/src/UI/Logic/Config/Language/Edit/LanguageEditFind.cs b/src/UI/Logic/Config/Language/Edit/LanguageEditFind.cs
index 086c45930d2..65e2aea01ea 100644
--- a/src/UI/Logic/Config/Language/Edit/LanguageEditFind.cs
+++ b/src/UI/Logic/Config/Language/Edit/LanguageEditFind.cs
@@ -8,7 +8,7 @@ public class LanguageEditFind
public string CaseInsensitive { get; set; }
public string FindPrevious { get; set; }
public string FindNext { get; set; }
- public string ReplaceAndFindNext { get; internal set; }
+ public string ReplaceAndFindNext { get; set; }
public string ReplaceAll { get; set; }
public string ReplaceTitle { get; set; }
public string ReplaceWith { get; set; }
diff --git a/src/UI/Logic/Config/Language/LanguageGeneral.cs b/src/UI/Logic/Config/Language/LanguageGeneral.cs
index 00467e66f14..e65f808ed4c 100644
--- a/src/UI/Logic/Config/Language/LanguageGeneral.cs
+++ b/src/UI/Logic/Config/Language/LanguageGeneral.cs
@@ -649,6 +649,13 @@ public class LanguageGeneral
public string Installed { get; set; }
public string AdvancedDotDotDot { get; set; }
public string ChooseAlignment { get; set; }
+ public string MaxWidthPixels { get; set; }
+ public string SampleText { get; set; }
+ public string BoxWidthPixels { get; set; }
+ public string FadeInOut { get; set; }
+ public string Alpha { get; set; }
+ public string PickResolution { get; set; }
+ public string ManualSync { get; set; }
public LanguageGeneral()
{
@@ -1297,5 +1304,12 @@ public LanguageGeneral()
Installed = "Installed";
AdvancedDotDotDot = "Advanced...";
ChooseAlignment = "Choose alignment";
+ MaxWidthPixels = "Max width (pixels)";
+ SampleText = "Sample text";
+ BoxWidthPixels = "Box width (pixels)";
+ FadeInOut = "Fade in/out";
+ Alpha = "Alpha";
+ PickResolution = "Pick resolution";
+ ManualSync = "Manual sync";
}
}
\ No newline at end of file
diff --git a/src/UI/Logic/Config/Language/Main/LanguageMain.cs b/src/UI/Logic/Config/Language/Main/LanguageMain.cs
index a0b004550a6..0ed40f2204a 100644
--- a/src/UI/Logic/Config/Language/Main/LanguageMain.cs
+++ b/src/UI/Logic/Config/Language/Main/LanguageMain.cs
@@ -102,6 +102,8 @@ public class LanguageMain
public string LiveSpellCheckLanguageXLoaded { get; set; }
public string DownloadFfmpegTitle { get; set; }
public string DownloadFfmpegQuestion { get; set; }
+ public string SelectCurrentSubtitleWhilePlayingOn { get; set; }
+ public string SelectCurrentSubtitleWhilePlayingOff { get; set; }
public LanguageMain()
{
@@ -201,5 +203,7 @@ public LanguageMain()
LiveSpellCheckLanguageXLoaded = "Live spell check language {0} loaded";
DownloadFfmpegTitle = "Download FFmpeg?";
DownloadFfmpegQuestion = "FFmpeg is required for playing online videos and for some video editing features.\n\nDownload FFmpeg now?";
+ SelectCurrentSubtitleWhilePlayingOn = "Select current subtitle while playing: ON";
+ SelectCurrentSubtitleWhilePlayingOff = "Select current subtitle while playing: OFF";
}
}
\ No newline at end of file
diff --git a/src/UI/Logic/Config/Language/Main/LanguageMainMenu.cs b/src/UI/Logic/Config/Language/Main/LanguageMainMenu.cs
index 69787adf4bb..d913c0ef03d 100644
--- a/src/UI/Logic/Config/Language/Main/LanguageMainMenu.cs
+++ b/src/UI/Logic/Config/Language/Main/LanguageMainMenu.cs
@@ -125,6 +125,8 @@ public class LanguageMainMenu
public string SortSubtitles { get; set; }
public string SetLayer { get; set; }
public string FilterLayersForDisplayDotDotDot { get; set; }
+ public string ToggleSelectSubtitleWhilePlayingCurrentlyOn { get; set; }
+ public string ToggleSelectSubtitleWhilePlayingCurrentlyOff { get; set; }
public LanguageMainMenu()
{
@@ -212,6 +214,8 @@ public LanguageMainMenu()
ListShotChanges = "List s_hot changes...";
GenerateImportShotChanges = "Generate/import s_hot changes...";
DockVideoControls = "_Dock video controls";
+ ToggleSelectSubtitleWhilePlayingCurrentlyOff = "Toggle select subtitle while playing (currently: off)";
+ ToggleSelectSubtitleWhilePlayingCurrentlyOn = "Toggle select subtitle while playing (currently: on)";
SetVideoOffset = "Set video offset...";
UpdateVideoOffsetX = "Update video offset from {0}...";
SmpteTiming = "SMPTE timing (non-integer frame rate)";
diff --git a/src/UI/Logic/Config/Language/Options/LanguageSettings.cs b/src/UI/Logic/Config/Language/Options/LanguageSettings.cs
index 39147f9fc06..4363c1bff71 100644
--- a/src/UI/Logic/Config/Language/Options/LanguageSettings.cs
+++ b/src/UI/Logic/Config/Language/Options/LanguageSettings.cs
@@ -276,6 +276,10 @@ public class LanguageSettings
public string WaveformToolbarItems { get; set; }
public string MatchIconColorToDarkTheme { get; set; }
public string SubtitlePreviewProperties { get; set; }
+ public string PixelWidthInfo { get; set; }
+ public string SpellCheckEngineHunSpelll { get; set; }
+ public string SpellCheckEngineMsWord { get; set; }
+ public string SpellCheckEngine { get; set; }
public LanguageSettings()
{
@@ -548,6 +552,10 @@ public LanguageSettings()
WaveformToolbarItems = "Waveform toolbar items";
MatchIconColorToDarkTheme = "Match icon color to dark theme foreground color";
SubtitlePreviewProperties = "Subtitle preview properties";
+ PixelWidthInfo = "Green lines = max-width limit | Red area = text exceeds limit";
+ SpellCheckEngineHunSpelll = "Hunspell";
+ SpellCheckEngineMsWord = "MS Word";
+ SpellCheckEngine = "Spell check engine";
}
public string GetContinuationStyleName(ContinuationStyle continuationStyle)
diff --git a/src/UI/Logic/Config/Language/Tools/LanguageBatchConvert.cs b/src/UI/Logic/Config/Language/Tools/LanguageBatchConvert.cs
index d775b985019..b32bd86a463 100644
--- a/src/UI/Logic/Config/Language/Tools/LanguageBatchConvert.cs
+++ b/src/UI/Logic/Config/Language/Tools/LanguageBatchConvert.cs
@@ -1,4 +1,5 @@
-using System;
+using Nikse.SubtitleEdit.Features.Video.BurnIn;
+using System;
namespace Nikse.SubtitleEdit.Logic.Config.Language.Tools;
@@ -26,6 +27,13 @@ public class LanguageBatchConvert
public string EditProperties { get; set; }
public string EditAttachments { get; set; }
public string ErrorsExportedX { get; set; }
+ public string SlowFontSizeChange { get; set; }
+ public string IncreaseFontKerning { get; set; }
+ public string ScrollUp { get; set; }
+ public string ScrollDown { get; set; }
+ public string RotateIn { get; set; }
+ public string TiltBounce { get; set; }
+ public string FontSizeBounceIn { get; set; }
public LanguageBatchConvert()
{
@@ -51,5 +59,12 @@ public LanguageBatchConvert()
EditProperties = "Edit properties";
EditAttachments = "Edit attachments";
ErrorsExportedX = "Errors exported: {0}";
+ SlowFontSizeChange = "Slow font size change";
+ IncreaseFontKerning = "Increase font kerning";
+ ScrollUp = "Scroll up";
+ ScrollDown = "Scroll down";
+ RotateIn = "Rotate in";
+ TiltBounce = "Tilt bounce";
+ FontSizeBounceIn = "Font size bounce in";
}
}
\ No newline at end of file
diff --git a/src/UI/Logic/Config/Language/Tools/LanguageMergeShortLines.cs b/src/UI/Logic/Config/Language/Tools/LanguageMergeShortLines.cs
index 34aeaefc2af..54ee3f41ac4 100644
--- a/src/UI/Logic/Config/Language/Tools/LanguageMergeShortLines.cs
+++ b/src/UI/Logic/Config/Language/Tools/LanguageMergeShortLines.cs
@@ -1,13 +1,21 @@
-namespace Nikse.SubtitleEdit.Logic.Config.Language;
+using DocumentFormat.OpenXml.Drawing.Charts;
+using System;
+using static Nikse.SubtitleEdit.Features.Translate.MergeAndSplitHelper;
+
+namespace Nikse.SubtitleEdit.Logic.Config.Language;
public class LanguageMergeShortLines
{
public string Title { get; set; }
- public string HighlightParts { get; internal set; }
+ public string HighlightParts { get; set; }
+ public string MergedLineInfo { get; set; }
+ public string LinesMergedX { get; set; }
public LanguageMergeShortLines()
{
Title = "Merge short lines";
HighlightParts = "Highlight parts (karaoke)";
+ MergedLineInfo = "Merged line {0} into {1} - {2}";
+ LinesMergedX = "Lines merged: {0}";
}
}
\ No newline at end of file
diff --git a/src/UI/Logic/Config/Language/Tools/LanguageNetflixCheckAndFix.cs b/src/UI/Logic/Config/Language/Tools/LanguageNetflixCheckAndFix.cs
index 9a561757d09..b98ac1c418c 100644
--- a/src/UI/Logic/Config/Language/Tools/LanguageNetflixCheckAndFix.cs
+++ b/src/UI/Logic/Config/Language/Tools/LanguageNetflixCheckAndFix.cs
@@ -8,6 +8,22 @@ public class LanguageNetflixCheckAndFix
public string SaveNetflixQualityReport { get; set; }
public string NetflixReportSaved { get; set; }
public string NetFlixQualityReportSavedToX { get; set; }
+ public string DialogHyphenSpace { get; set; }
+ public string EllipsesNotThreeDots { get; set; }
+ public string OnlyAllowedGlyphs { get; set; }
+ public string Italics { get; set; }
+ public string MaxCharsSec { get; set; }
+ public string MaxDuration { get; set; }
+ public string MaxLineLength { get; set; }
+ public string MinDuration { get; set; }
+ public string MaxNumberOfLines { get; set; }
+ public string OneToTenSpellOut { get; set; }
+ public string ShotChanges { get; set; }
+ public string StartNumberSpellOut { get; set; }
+ public string TextforHiUseBrackets { get; set; }
+ public string FrameRate { get; set; }
+ public string TwoFrameGrap { get; set; }
+ public string WhiteSpace { get; set; }
public LanguageNetflixCheckAndFix()
{
@@ -17,5 +33,21 @@ public LanguageNetflixCheckAndFix()
SaveNetflixQualityReport = "Save Netflix quality report";
NetflixReportSaved = "Netflix quality report saved";
NetFlixQualityReportSavedToX = "Netflix quality report saved to:\n {0}";
+ DialogHyphenSpace = "Dialog hyphen space";
+ EllipsesNotThreeDots = "Use elipses (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";
+ FrameRate = "Frame rate";
+ TwoFrameGrap = "Two frame gap";
+ WhiteSpace = "White space";
}
}
\ No newline at end of file
diff --git a/src/UI/Logic/Config/Language/Translate/LanguageTranslate.cs b/src/UI/Logic/Config/Language/Translate/LanguageTranslate.cs
index 11c477ee874..e9c09345984 100644
--- a/src/UI/Logic/Config/Language/Translate/LanguageTranslate.cs
+++ b/src/UI/Logic/Config/Language/Translate/LanguageTranslate.cs
@@ -15,6 +15,7 @@ public class LanguageTranslate
public string DelayInSecondsBetweenRequests { get; set; }
public string MaxBytesPerRequest { get; set; }
public string PromptText { get; set; }
+ public string TranslateEachLineSeparately { get; set; }
public LanguageTranslate()
{
@@ -31,5 +32,6 @@ public LanguageTranslate()
DelayInSecondsBetweenRequests = "Delay in seconds between requests";
MaxBytesPerRequest = "Max bytes per request";
PromptText = "Prompt text";
+ TranslateEachLineSeparately = "Translate each line separately";
}
}
\ No newline at end of file
diff --git a/src/UI/Logic/Config/Language/Video/LanguageBurnIn.cs b/src/UI/Logic/Config/Language/Video/LanguageBurnIn.cs
index 95d7bac5610..c52b9cfbaaa 100644
--- a/src/UI/Logic/Config/Language/Video/LanguageBurnIn.cs
+++ b/src/UI/Logic/Config/Language/Video/LanguageBurnIn.cs
@@ -44,6 +44,7 @@ public class LanguageBurnIn
public string VideoFileSize { get; set; }
public string OneBox { get; set; }
public string BoxPerLine { get; set; }
+ public string LogoInfo { get; set; }
public LanguageBurnIn()
{
@@ -89,5 +90,6 @@ public LanguageBurnIn()
OneBox = "One box";
BoxPerLine = "Box per line";
UseSourceResolution = "Use source resolution";
+ LogoInfo = "Pick a PNG image and drag it to position it on the video.";
}
}
\ No newline at end of file
diff --git a/src/UI/Logic/Config/Language/Video/LanguageTextToSpeech.cs b/src/UI/Logic/Config/Language/Video/LanguageTextToSpeech.cs
index 39c6b2e0360..ada23b60361 100644
--- a/src/UI/Logic/Config/Language/Video/LanguageTextToSpeech.cs
+++ b/src/UI/Logic/Config/Language/Video/LanguageTextToSpeech.cs
@@ -1,4 +1,6 @@
-namespace Nikse.SubtitleEdit.Logic.Config.Language;
+using System;
+
+namespace Nikse.SubtitleEdit.Logic.Config.Language;
public class LanguageTextToSpeech
{
@@ -48,6 +50,7 @@ public class LanguageTextToSpeech
public string EdgeTtsPitchDescription { get; set; }
public string EdgeTtsVolume { get; set; }
public string EdgeTtsVolumeDescription { get; set; }
+ public string DownloadPiperPrompt { get; set; }
public LanguageTextToSpeech()
{
@@ -97,5 +100,6 @@ public LanguageTextToSpeech()
EdgeTtsPitchDescription = "Pitch adjustment for Edge-TTS, e.g. \"+10Hz\", \"-5Hz\", or \"+0Hz\" for default.";
EdgeTtsVolume = "Edge-TTS volume";
EdgeTtsVolumeDescription = "Volume adjustment for Edge-TTS, e.g. \"+20%\", \"-10%\", or \"+0%\" for default.";
+ DownloadPiperPrompt = $"\"Text to speech\" requires Piper.{Environment.NewLine}{Environment.NewLine}Download and use Piper?";
}
}
\ No newline at end of file
diff --git a/src/UI/Logic/Config/Language/Video/LanguageVideo.cs b/src/UI/Logic/Config/Language/Video/LanguageVideo.cs
index e0ca2e5e772..c420014000f 100644
--- a/src/UI/Logic/Config/Language/Video/LanguageVideo.cs
+++ b/src/UI/Logic/Config/Language/Video/LanguageVideo.cs
@@ -37,6 +37,7 @@ public class LanguageVideo
public string ViewMatroskaTrackX { get; set; }
public string ResolutionSeparator { get; set; }
public string OpenFromUrlTitle { get; set; }
+ public string ToggleCurrentSubtitleWhilePlaying { get; set; }
public LanguageVideo()
{
@@ -71,5 +72,6 @@ public LanguageVideo()
ViewMatroskaTrackX = "View Matroska track - {0}";
ResolutionSeparator = "x";
OpenFromUrlTitle = "Open video file from URL";
+ ToggleCurrentSubtitleWhilePlaying = "Toggle current subtitle while playing";
}
}
\ No newline at end of file
diff --git a/src/UI/Logic/Config/Se.cs b/src/UI/Logic/Config/Se.cs
index 14f937906eb..ca22a9dfa03 100644
--- a/src/UI/Logic/Config/Se.cs
+++ b/src/UI/Logic/Config/Se.cs
@@ -186,7 +186,7 @@ public static string TesseractModelFolder
public static string SpectrogramsFolder => Path.Combine(DataFolder, "Spectrograms");
public static string ShotChangesFolder => Path.Combine(DataFolder, "ShotChanges");
- public static string Version { get; set; } = "v5.0.0-beta12";
+ public static string Version { get; set; } = "v5.0.0-beta14";
public Se()
{
diff --git a/src/UI/Logic/Config/SeSpellCheck.cs b/src/UI/Logic/Config/SeSpellCheck.cs
index 2f9f762b143..9f52cd34305 100644
--- a/src/UI/Logic/Config/SeSpellCheck.cs
+++ b/src/UI/Logic/Config/SeSpellCheck.cs
@@ -2,7 +2,18 @@
public class SeSpellCheck
{
+ public const string SpellCheckHunspell = "hunspell";
+ public const string SpellCheckMsWord = "msword";
+
+ public string SpellCheckProvider { get; set; }
+
public string? LastLanguageDictionaryFile { get; set; }
public bool PromptForUnknownOneLetterWords { get; set; } = false;
public bool TreatInQuoteASIng { get; set; } = true;
+
+ public SeSpellCheck()
+ {
+ SpellCheckProvider = SpellCheckHunspell;
+
+ }
}
diff --git a/src/UI/Logic/Config/SeTools.cs b/src/UI/Logic/Config/SeTools.cs
index f75c0ea85ca..142847302b3 100644
--- a/src/UI/Logic/Config/SeTools.cs
+++ b/src/UI/Logic/Config/SeTools.cs
@@ -1,5 +1,6 @@
using Avalonia.Media;
using Nikse.SubtitleEdit.Core.SubtitleFormats;
+using System.Collections.Generic;
namespace Nikse.SubtitleEdit.Logic.Config;
@@ -81,6 +82,7 @@ public class SeTools
public bool SpeechToTextSelectedLinesPromptFistTimeOnly { get; set; }
public bool MultipleReplaceShowDotDotDotButtons { get; set; }
public bool GridFocusTextboxAfterInsertNew { get; set; }
+ public List FindHistory { get; set; } = new List();
public SeTools()
{
diff --git a/src/UI/Logic/FindService.cs b/src/UI/Logic/FindService.cs
index e07833ce1e8..77edc67c13d 100644
--- a/src/UI/Logic/FindService.cs
+++ b/src/UI/Logic/FindService.cs
@@ -1,4 +1,5 @@
-using System;
+using Nikse.SubtitleEdit.Logic.Config;
+using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
@@ -19,6 +20,14 @@ public partial class FindService : IFindService
public IReadOnlyList SearchHistory => _searchHistory.AsReadOnly();
+ public FindService()
+ {
+ foreach (var findHistory in Se.Settings.Tools.FindHistory)
+ {
+ _searchHistory.Add(findHistory);
+ }
+ }
+
public void Initialize(List textLines, int currentLineNumber, bool wholeWord, FindMode findMode)
{
_textLines = textLines;
@@ -254,11 +263,6 @@ public void Reset()
ResetSearchState();
}
- public void ClearSearchHistory()
- {
- _searchHistory.Clear();
- }
-
public void RemoveFromSearchHistory(string searchText)
{
_searchHistory.Remove(searchText);
@@ -289,6 +293,8 @@ private void AddToSearchHistory(string searchText)
{
_searchHistory.RemoveAt(_searchHistory.Count - 1);
}
+
+ Se.Settings.Tools.FindHistory = _searchHistory;
}
private (int lineIndex, int textIndex, string foundText) FindInList(string searchText, int startLineIndex, int startTextIndex = 0)
diff --git a/src/UI/Logic/IFindService.cs b/src/UI/Logic/IFindService.cs
index 9ee70a27077..48a8ec7d46e 100644
--- a/src/UI/Logic/IFindService.cs
+++ b/src/UI/Logic/IFindService.cs
@@ -21,6 +21,5 @@ public interface IFindService
int Count(string searchText);
List<(int LineIndex, int TextIndex, string FoundText)> FindAll(string searchText);
void Reset();
- void ClearSearchHistory();
void RemoveFromSearchHistory(string searchText);
}
\ No newline at end of file
diff --git a/src/UI/Logic/Media/IVlcReloader.cs b/src/UI/Logic/Media/IVlcReloader.cs
new file mode 100644
index 00000000000..5bf2ad5eff8
--- /dev/null
+++ b/src/UI/Logic/Media/IVlcReloader.cs
@@ -0,0 +1,13 @@
+using Nikse.SubtitleEdit.Core.Common;
+using Nikse.SubtitleEdit.Core.SubtitleFormats;
+using Nikse.SubtitleEdit.Logic.VideoPlayers.LibMpvDynamic;
+using System.Threading.Tasks;
+
+namespace Nikse.SubtitleEdit.Logic.Media;
+
+public interface IVlcReloader
+{
+ Task RefreshVlc(LibVlcDynamicPlayer vlc, Subtitle subtitle, Subtitle? subtitleSecondary, SubtitleFormat uiFormat);
+ void Reset();
+ bool SmpteMode { get; set; }
+}
diff --git a/src/UI/Logic/Media/VlcReloader.cs b/src/UI/Logic/Media/VlcReloader.cs
new file mode 100644
index 00000000000..19c5cc3c0b6
--- /dev/null
+++ b/src/UI/Logic/Media/VlcReloader.cs
@@ -0,0 +1,258 @@
+using Avalonia.Skia;
+using Nikse.SubtitleEdit.Core.Common;
+using Nikse.SubtitleEdit.Core.SubtitleFormats;
+using Nikse.SubtitleEdit.Logic.Config;
+using Nikse.SubtitleEdit.Logic.VideoPlayers.LibMpvDynamic;
+using System;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Nikse.SubtitleEdit.Logic.Media;
+
+public class VlcReloader : IVlcReloader
+{
+ public bool SmpteMode { get; set; }
+ public int VideoWidth { get; set; } = 1280;
+ public int VideoHeight { get; set; } = 720;
+
+ private readonly AdvancedSubStationAlpha _assFormat = new();
+ private Subtitle? _subtitlePrev;
+ private string _mpvTextOld = string.Empty;
+ private int _mpvSubOldHash = -1;
+ private string? _mpvTextFileName;
+ private string? _mpvTextFileExtension;
+ private int _retryCount = 3;
+ private string? _mpvPreviewStyleHeader;
+
+ public async Task RefreshVlc(LibVlcDynamicPlayer vlc, Subtitle subtitle, Subtitle? subtitleSecondary, SubtitleFormat uiFormat)
+ {
+ if (subtitle.Paragraphs.Count == 0 && subtitleSecondary == null)
+ {
+ return;
+ }
+
+ try
+ {
+ var uiFormatType = uiFormat.GetType();
+ subtitle = new Subtitle(subtitle, false);
+
+ if (SmpteMode)
+ {
+ foreach (var paragraph in subtitle.Paragraphs)
+ {
+ paragraph.StartTime.TotalMilliseconds *= 1.001;
+ paragraph.EndTime.TotalMilliseconds *= 1.001;
+ }
+ }
+
+ SubtitleFormat format = _assFormat;
+ string text;
+ if (uiFormatType == typeof(WebVTT) || uiFormatType == typeof(WebVTTFileWithLineNumber))
+ {
+ var defaultStyle = GetMpvPreviewStyle(Se.Settings.Video);
+ defaultStyle.BorderStyle = "3";
+ subtitle = new Subtitle(subtitle);
+ subtitle = WebVttToAssa.Convert(subtitle, defaultStyle, VideoWidth, VideoHeight);
+ AddSecondarySubtitle(subtitle, subtitleSecondary);
+ text = subtitle.ToText(_assFormat);
+ }
+ else
+ {
+ if (subtitle.Header == null || !subtitle.Header.Contains("[V4+ Styles]") || uiFormatType != typeof(AdvancedSubStationAlpha))
+ {
+ if (string.IsNullOrEmpty(subtitle.Header) && uiFormatType == typeof(SubStationAlpha))
+ {
+ subtitle.Header = SubStationAlpha.DefaultHeader;
+ }
+
+ if (subtitle.Header != null && subtitle.Header.Contains("[V4 Styles]", StringComparison.Ordinal))
+ {
+ subtitle.Header = AdvancedSubStationAlpha.GetHeaderAndStylesFromSubStationAlpha(subtitle.Header);
+ }
+
+ var oldSub = subtitle;
+ subtitle = new Subtitle(subtitle);
+ if (Se.Settings.Appearance.RightToLeft)
+ {
+ for (var index = 0; index < subtitle.Paragraphs.Count; index++)
+ {
+ var paragraph = subtitle.Paragraphs[index];
+ if (LanguageAutoDetect.ContainsRightToLeftLetter(paragraph.Text))
+ {
+ paragraph.Text = Utilities.FixRtlViaUnicodeChars(paragraph.Text);
+ }
+ }
+ }
+
+ if (subtitle.Header == null || !(subtitle.Header.Contains("[V4+ Styles]") && uiFormatType == typeof(SubStationAlpha)))
+ {
+ subtitle.Header = MpvPreviewStyleHeader;
+ }
+
+ if (oldSub.Header != null && oldSub.Header.Length > 20 && oldSub.Header.AsSpan(3, 3).SequenceEqual("STL"))
+ {
+ var boldValue = Configuration.Settings.General.VideoPlayerPreviewFontBold ? "-1" : "0";
+ var boxStyle = $"Style: Box,{Configuration.Settings.General.VideoPlayerPreviewFontName},{Configuration.Settings.General.VideoPlayerPreviewFontSize},&H00FFFFFF,&H0300FFFF,&H00000000,&H02000000,{boldValue},0,0,0,100,100,0,0,3,2,0,2,10,10,10,1{Environment.NewLine}Style: Default,";
+ subtitle.Header = subtitle.Header.Replace("Style: Default,", boxStyle, StringComparison.Ordinal);
+
+ var useBox = false;
+ if (Configuration.Settings.SubtitleSettings.EbuStlTeletextUseBox)
+ {
+ try
+ {
+ var encoding = Ebu.GetEncoding(oldSub.Header[..3]);
+ var buffer = encoding.GetBytes(oldSub.Header);
+ var header = Ebu.ReadHeader(buffer);
+ if (header.DisplayStandardCode != "0")
+ {
+ useBox = true;
+ }
+ }
+ catch
+ {
+ // ignore
+ }
+ }
+
+ for (var index = 0; index < subtitle.Paragraphs.Count; index++)
+ {
+ var p = subtitle.Paragraphs[index];
+
+ p.Extra = useBox ? "Box" : "Default";
+
+ if (p.Text.Contains("", StringComparison.Ordinal))
+ {
+ p.Extra = "Box";
+ p.Text = p.Text.Replace("", string.Empty).Replace("", string.Empty);
+ }
+ }
+ }
+ }
+
+ AddSecondarySubtitle(subtitle, subtitleSecondary);
+ var hash = subtitle.GetFastHashCode(null);
+ if (hash != _mpvSubOldHash || string.IsNullOrEmpty(_mpvTextOld))
+ {
+ text = subtitle.ToText(_assFormat);
+ _mpvSubOldHash = hash;
+ }
+ else
+ {
+ text = _mpvTextOld;
+ }
+ }
+
+ if (text != _mpvTextOld || _mpvTextFileName == null || _retryCount > 0)
+ {
+ if (_retryCount >= 0 || string.IsNullOrEmpty(_mpvTextFileName) || _subtitlePrev == null || _subtitlePrev.FileName != subtitle.FileName || _mpvTextFileExtension != format.Extension)
+ {
+ DeleteTempMpvFileName();
+ _mpvTextFileName = FileUtil.GetTempFileName(format.Extension);
+ _mpvTextFileExtension = format.Extension;
+ await File.WriteAllTextAsync(_mpvTextFileName, text);
+ await vlc.SubAdd(_mpvTextFileName);
+ _retryCount--;
+ }
+ else
+ {
+ DeleteTempMpvFileName();
+ _mpvTextFileName = FileUtil.GetTempFileName(format.Extension);
+ _mpvTextFileExtension = format.Extension;
+ await File.WriteAllTextAsync(_mpvTextFileName, text);
+ await vlc.SubAdd(_mpvTextFileName);
+ }
+ _mpvTextOld = text;
+ }
+ _subtitlePrev = subtitle;
+ }
+ catch (Exception exception)
+ {
+ Se.LogError(exception);
+ }
+ }
+
+ private static void AddSecondarySubtitle(Subtitle subtitle, Subtitle? subtitleSecondary)
+ {
+ if (subtitleSecondary == null)
+ {
+ return;
+ }
+
+
+ var styleName = subtitleSecondary.Paragraphs.FirstOrDefault()?.Extra ?? "Secondary";
+ var style = AdvancedSubStationAlpha.GetSsaStyle(styleName, subtitleSecondary.Header);
+ subtitle.Header = AdvancedSubStationAlpha.AddSsaStyle(style, subtitle.Header);
+ foreach (var p in subtitleSecondary.Paragraphs)
+ {
+ subtitle.Paragraphs.Add(p);
+ }
+ }
+
+ private string MpvPreviewStyleHeader
+ {
+ get
+ {
+ if (string.IsNullOrEmpty(_mpvPreviewStyleHeader))
+ {
+ UpdateMpvStyle();
+ }
+
+ return _mpvPreviewStyleHeader ?? string.Empty;
+ }
+ set => _mpvPreviewStyleHeader = value;
+ }
+
+ public void UpdateMpvStyle()
+ {
+ var mpvStyle = GetMpvPreviewStyle(Se.Settings.Video);
+ MpvPreviewStyleHeader = string.Format(AdvancedSubStationAlpha.HeaderNoStyles, "MPV preview file", mpvStyle.ToRawAss(SsaStyle.DefaultAssStyleFormat));
+ }
+
+ private static SsaStyle GetMpvPreviewStyle(SeVideo gs)
+ {
+ return new SsaStyle
+ {
+ Name = "Default",
+ FontName = gs.MpvPreviewFontName,
+ FontSize = gs.MpvPreviewFontSize,
+ Bold = gs.MpvPreviewFontBold,
+ Primary = gs.MpvPreviewColorPrimary.FromHexToColor().ToSKColor(),
+ Outline = gs.MpvPreviewColorOutline.FromHexToColor().ToSKColor(),
+ Background = gs.MpvPreviewColorShadow.FromHexToColor().ToSKColor(),
+ OutlineWidth = gs.MpvPreviewOutlineWidth,
+ ShadowWidth = gs.MpvPreviewShadowWidth,
+ BorderStyle = gs.MpvPreviewBorderType.ToString(),
+ Alignment = "2", // bottom center
+ MarginVertical = gs.MpvPreviewMargin,
+ MarginLeft = gs.MpvPreviewMargin,
+ MarginRight = gs.MpvPreviewMargin,
+ };
+ }
+
+ private void DeleteTempMpvFileName()
+ {
+ try
+ {
+ if (File.Exists(_mpvTextFileName))
+ {
+ File.Delete(_mpvTextFileName);
+ _mpvTextFileName = null;
+ }
+ }
+ catch
+ {
+ // ignored
+ }
+ }
+
+ public void Reset()
+ {
+ _mpvTextFileName = null;
+ _mpvTextFileExtension = null;
+ _mpvTextOld = string.Empty;
+ _mpvPreviewStyleHeader = null;
+ _retryCount = 3;
+ _mpvSubOldHash = -1;
+ }
+}
diff --git a/src/UI/Logic/NetflixQualityCheck/INetflixQualityChecker.cs b/src/UI/Logic/NetflixQualityCheck/INetflixQualityChecker.cs
index 5239383903f..fdb915b1340 100644
--- a/src/UI/Logic/NetflixQualityCheck/INetflixQualityChecker.cs
+++ b/src/UI/Logic/NetflixQualityCheck/INetflixQualityChecker.cs
@@ -4,5 +4,6 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
public interface INetflixQualityChecker
{
+ string Name { get; }
void Check(Subtitle subtitle, NetflixQualityController controller);
}
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckBridgeGaps.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckBridgeGaps.cs
index ad142c5d3c8..9825abd77e1 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckBridgeGaps.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckBridgeGaps.cs
@@ -11,6 +11,13 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
///
public class NetflixCheckBridgeGaps : INetflixQualityChecker
{
+ public string Name { get; set; }
+
+ public NetflixCheckBridgeGaps(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
if (controller.Language == "ja")
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckDialogHyphenSpace.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckDialogHyphenSpace.cs
index 44a6f136df1..582c4e9b3d9 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckDialogHyphenSpace.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckDialogHyphenSpace.cs
@@ -8,6 +8,14 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
///
public class NetflixCheckDialogHyphenSpace : INetflixQualityChecker
{
+ public string Name { get; set; }
+
+ public NetflixCheckDialogHyphenSpace(string name)
+ {
+ Name = name;
+ }
+
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
if (controller.Language == "ja")
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckEllipsesNotThreeDots.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckEllipsesNotThreeDots.cs
index 40c1bc1d7f2..00d5c76ec6d 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckEllipsesNotThreeDots.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckEllipsesNotThreeDots.cs
@@ -7,6 +7,13 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
///
public class NetflixCheckEllipsesNotThreeDots : INetflixQualityChecker
{
+ public string Name { get; set; }
+
+ public NetflixCheckEllipsesNotThreeDots(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
string comment = "Use the single smart character (U+2026) as opposed to three dots/periods in a row";
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckGlyph.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckGlyph.cs
index e832178ba87..dc68bd69177 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckGlyph.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckGlyph.cs
@@ -13,6 +13,13 @@ public class NetflixCheckGlyph : INetflixQualityChecker
{
private static HashSet? _netflixGlyphs = null;
+ public string Name { get; set; }
+
+ public NetflixCheckGlyph(string name)
+ {
+ Name = name;
+ }
+
private static HashSet LoadNetflixGlyphs()
{
if (_netflixGlyphs != null)
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckItalics.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckItalics.cs
index af187630169..fac5e1401b6 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckItalics.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckItalics.cs
@@ -5,6 +5,12 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
public class NetflixCheckItalics : INetflixQualityChecker
{
+ public string Name { get; set; }
+
+ public NetflixCheckItalics(string name)
+ {
+ Name = name;
+ }
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckMaxCps.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckMaxCps.cs
index 1a7096aea02..04215141b3b 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckMaxCps.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckMaxCps.cs
@@ -10,6 +10,13 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
///
public class NetflixCheckMaxCps : INetflixQualityChecker
{
+ public string Name { get; set; }
+
+ public NetflixCheckMaxCps(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
ICalcLength calc = CalcFactory.MakeCalculator(nameof(CalcAll));
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckMaxDuration.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckMaxDuration.cs
index ecbde852d8f..9d55a5e9374 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckMaxDuration.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckMaxDuration.cs
@@ -7,6 +7,13 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
///
public class NetflixCheckMaxDuration : INetflixQualityChecker
{
+ public string Name { get; set; }
+
+ public NetflixCheckMaxDuration(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
foreach (Paragraph p in subtitle.Paragraphs)
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckMaxLineLength.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckMaxLineLength.cs
index 17000f9f08e..2b675d747dd 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckMaxLineLength.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckMaxLineLength.cs
@@ -11,6 +11,13 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
///
public class NetflixCheckMaxLineLength : INetflixQualityChecker
{
+ public string Name { get; set; }
+
+ public NetflixCheckMaxLineLength(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
foreach (var p in subtitle.Paragraphs)
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckMinDuration.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckMinDuration.cs
index 9d4673320b9..94d9e98a456 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckMinDuration.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckMinDuration.cs
@@ -8,6 +8,13 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
///
public class NetflixCheckMinDuration : INetflixQualityChecker
{
+ public string Name { get; set; }
+
+ public NetflixCheckMinDuration(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
for (int index = 0; index < subtitle.Paragraphs.Count; index++)
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckNumberOfLines.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckNumberOfLines.cs
index 4213d631557..678170f54d3 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckNumberOfLines.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckNumberOfLines.cs
@@ -9,6 +9,13 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
///
public class NetflixCheckNumberOfLines : INetflixQualityChecker
{
+ public string Name { get; set; }
+
+ public NetflixCheckNumberOfLines(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
foreach (var p in subtitle.Paragraphs)
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckNumbersOneToTenSpellOut.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckNumbersOneToTenSpellOut.cs
index 29d23f148a8..493c439bd86 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckNumbersOneToTenSpellOut.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckNumbersOneToTenSpellOut.cs
@@ -12,6 +12,13 @@ public class NetflixCheckNumbersOneToTenSpellOut : INetflixQualityChecker
private static readonly Regex NumberOneToNine = new Regex(@"\b\d\b", RegexOptions.Compiled);
private static readonly Regex NumberTen = new Regex(@"\b10\b", RegexOptions.Compiled);
+ public string Name { get; set; }
+
+ public NetflixCheckNumbersOneToTenSpellOut(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
if (controller.Language == "ja" || controller.Language == "ar")
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckShotChange.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckShotChange.cs
index 2d1ef697a2c..b815d8b8059 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckShotChange.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckShotChange.cs
@@ -14,6 +14,13 @@ public class NetflixCheckShotChange : INetflixQualityChecker
{
public static string ShotChangeDirectory = string.Empty;
+ public string Name { get; set; }
+
+ public NetflixCheckShotChange(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
if (!controller.VideoExists)
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckStartNumberSpellOut.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckStartNumberSpellOut.cs
index 5c804061c52..28c84b9cb00 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckStartNumberSpellOut.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckStartNumberSpellOut.cs
@@ -12,6 +12,13 @@ public class NetflixCheckStartNumberSpellOut : INetflixQualityChecker
private static readonly Regex NumberStartInside = new Regex(@"[\.,!] \d+ [A-Za-z]", RegexOptions.Compiled);
private static readonly Regex NumberStartInside2 = new Regex(@"[\.,!]\r\n\d+ [A-Za-z]", RegexOptions.Compiled);
+ public string Name { get; set; }
+
+ public NetflixCheckStartNumberSpellOut(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
foreach (var p in subtitle.Paragraphs)
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckTextForHiUseBrackets.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckTextForHiUseBrackets.cs
index ea766ca93c7..45570be7024 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckTextForHiUseBrackets.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckTextForHiUseBrackets.cs
@@ -8,6 +8,13 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
///
public class NetflixCheckTextForHiUseBrackets : INetflixQualityChecker
{
+ public string Name { get; set; }
+
+ public NetflixCheckTextForHiUseBrackets(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
if (controller.Language == "jp")
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckTimedTextFrameRate.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckTimedTextFrameRate.cs
index 6acc81e0e35..38a1b3a5ebe 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckTimedTextFrameRate.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckTimedTextFrameRate.cs
@@ -7,6 +7,14 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
public class NetflixCheckTimedTextFrameRate : INetflixQualityChecker
{
+
+ public string Name { get; set; }
+
+ public NetflixCheckTimedTextFrameRate(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
if (subtitle?.Header != null && subtitle.Header.Contains("ttp:frameRate="))
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckTwoFramesGap.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckTwoFramesGap.cs
index f0e357c1768..19be9c1a218 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckTwoFramesGap.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckTwoFramesGap.cs
@@ -8,6 +8,13 @@ namespace Nikse.SubtitleEdit.Logic.NetflixQualityCheck;
///
public class NetflixCheckTwoFramesGap : INetflixQualityChecker
{
+ public string Name { get; set; }
+
+ public NetflixCheckTwoFramesGap(string name)
+ {
+ Name = name;
+ }
+
public void Check(Subtitle subtitle, NetflixQualityController controller)
{
if (controller.Language == "ja")
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixCheckWhiteSpace.cs b/src/UI/Logic/NetflixQualityCheck/NetflixCheckWhiteSpace.cs
index 23762a4e7fd..7cbedb8fdeb 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixCheckWhiteSpace.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixCheckWhiteSpace.cs
@@ -10,6 +10,13 @@ public class NetflixCheckWhiteSpace : INetflixQualityChecker
private static readonly Regex SpacesBeforePunctuation = new Regex(@"[^\s]( |\n|\r\n)[!?).,؟،…]", RegexOptions.Compiled);
private static readonly Regex TwoPlusConsequentSpaces = new Regex(@"( |\n|\r\n){2,}", RegexOptions.Compiled);
+ public string Name { get; set; }
+
+ public NetflixCheckWhiteSpace(string name)
+ {
+ Name = name;
+ }
+
private static void AddWhiteSpaceWarning(Paragraph p, NetflixQualityController report, string issue, int pos)
{
string timeCode = p.StartTime.ToHHMMSSFF();
diff --git a/src/UI/Logic/NetflixQualityCheck/NetflixQualityController.cs b/src/UI/Logic/NetflixQualityCheck/NetflixQualityController.cs
index 1d7f2ce843e..10b6669ca17 100644
--- a/src/UI/Logic/NetflixQualityCheck/NetflixQualityController.cs
+++ b/src/UI/Logic/NetflixQualityCheck/NetflixQualityController.cs
@@ -1,5 +1,6 @@
using Nikse.SubtitleEdit.Core.Common;
using Nikse.SubtitleEdit.Core.Enums;
+using Nikse.SubtitleEdit.Logic.Config;
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -299,25 +300,25 @@ public static string StringContext(string str, int pos, int radius)
public static List GetAllCheckers()
{
return new List
- {
- new NetflixCheckBridgeGaps(),
- new NetflixCheckDialogHyphenSpace(),
- new NetflixCheckEllipsesNotThreeDots(),
- new NetflixCheckGlyph(),
- new NetflixCheckItalics(),
- new NetflixCheckMaxCps(),
- new NetflixCheckMaxDuration(),
- new NetflixCheckMaxLineLength(),
- new NetflixCheckMinDuration(),
- new NetflixCheckNumberOfLines(),
- new NetflixCheckNumbersOneToTenSpellOut(),
- new NetflixCheckShotChange(),
- new NetflixCheckStartNumberSpellOut(),
- new NetflixCheckTextForHiUseBrackets(),
- new NetflixCheckTimedTextFrameRate(),
- new NetflixCheckTwoFramesGap(),
- new NetflixCheckWhiteSpace(),
- };
+ {
+ new NetflixCheckBridgeGaps(Se.Language.Tools.BridgeGaps.Title),
+ new NetflixCheckDialogHyphenSpace(Se.Language.Tools.NetflixCheckAndFix.DialogHyphenSpace),
+ new NetflixCheckEllipsesNotThreeDots(Se.Language.Tools.NetflixCheckAndFix.EllipsesNotThreeDots),
+ new NetflixCheckGlyph(Se.Language.Tools.NetflixCheckAndFix.OnlyAllowedGlyphs),
+ new NetflixCheckItalics(Se.Language.Tools.NetflixCheckAndFix.Italics),
+ new NetflixCheckMaxCps(Se.Language.Tools.NetflixCheckAndFix.MaxCharsSec),
+ new NetflixCheckMaxDuration(Se.Language.Tools.NetflixCheckAndFix.MaxDuration),
+ new NetflixCheckMaxLineLength(Se.Language.Tools.NetflixCheckAndFix.MaxLineLength),
+ new NetflixCheckMinDuration(Se.Language.Tools.NetflixCheckAndFix.MinDuration),
+ new NetflixCheckNumberOfLines(Se.Language.Tools.NetflixCheckAndFix.MaxNumberOfLines),
+ new NetflixCheckNumbersOneToTenSpellOut(Se.Language.Tools.NetflixCheckAndFix.OneToTenSpellOut),
+ new NetflixCheckShotChange(Se.Language.Tools.NetflixCheckAndFix.ShotChanges),
+ new NetflixCheckStartNumberSpellOut(Se.Language.Tools.NetflixCheckAndFix.StartNumberSpellOut),
+ new NetflixCheckTextForHiUseBrackets(Se.Language.Tools.NetflixCheckAndFix.TextforHiUseBrackets),
+ new NetflixCheckTimedTextFrameRate(Se.Language.Tools.NetflixCheckAndFix.FrameRate),
+ new NetflixCheckTwoFramesGap(Se.Language.Tools.NetflixCheckAndFix.TwoFrameGrap),
+ new NetflixCheckWhiteSpace(Se.Language.Tools.NetflixCheckAndFix.WhiteSpace),
+ };
}
public void RunChecks(Subtitle subtitle)
diff --git a/src/UI/Logic/Ocr/ExpandedOcrGroup.cs b/src/UI/Logic/Ocr/ExpandedOcrGroup.cs
new file mode 100644
index 00000000000..65a9f69c3a0
--- /dev/null
+++ b/src/UI/Logic/Ocr/ExpandedOcrGroup.cs
@@ -0,0 +1,106 @@
+using SkiaSharp;
+using System;
+using System.Collections.Generic;
+
+namespace Nikse.SubtitleEdit.Logic.Ocr;
+
+public sealed class ExpandedOcrGroup
+{
+ public IReadOnlyList Items { get; }
+ public ImageSplitterItem2 FirstItem => Items[0];
+ public SKRectI Bounds { get; }
+ public NikseBitmap2 PreviewBitmap { get; }
+ public int MinTop { get; }
+ public int MinY { get; }
+ public int Count => Items.Count;
+ public int PreviewTopMargin => FirstItem.Top - MinTop;
+
+ private ExpandedOcrGroup(
+ List items,
+ SKRectI bounds,
+ NikseBitmap2 previewBitmap,
+ int minTop,
+ int minY)
+ {
+ Items = items;
+ Bounds = bounds;
+ PreviewBitmap = previewBitmap;
+ MinTop = minTop;
+ MinY = minY;
+ }
+
+ public static ExpandedOcrGroup? Create(NikseBitmap2 sourceBitmap, IReadOnlyList letters, int startIndex, int count)
+ {
+ if (count <= 1 || startIndex < 0 || startIndex + count > letters.Count)
+ {
+ return null;
+ }
+
+ var items = new List(count);
+ var minTop = int.MaxValue;
+ var minX = int.MaxValue;
+ var minY = int.MaxValue;
+ var maxX = int.MinValue;
+ var maxY = int.MinValue;
+
+ for (var i = startIndex; i < startIndex + count; i++)
+ {
+ var letter = letters[i];
+ if (letter.NikseBitmap == null)
+ {
+ return null;
+ }
+
+ items.Add(letter);
+ minTop = Math.Min(minTop, letter.Top);
+ minX = Math.Min(minX, letter.X);
+ minY = Math.Min(minY, letter.Y);
+ maxX = Math.Max(maxX, letter.X + letter.NikseBitmap.Width);
+ maxY = Math.Max(maxY, letter.Y + letter.NikseBitmap.Height);
+ }
+
+ var bounds = new SKRectI(minX, minY, maxX, maxY);
+ var previewBitmap = sourceBitmap.CopyRectangle(new NikseRectangle(minX, minY, maxX - minX, maxY - minY));
+ return new ExpandedOcrGroup(items, bounds, previewBitmap, minTop, minY);
+ }
+
+ public NOcrChar CreateNOcrChar()
+ {
+ return new NOcrChar
+ {
+ Width = PreviewBitmap.Width,
+ Height = PreviewBitmap.Height,
+ MarginTop = PreviewTopMargin,
+ ExpandCount = Count,
+ };
+ }
+
+ public BinaryOcrBitmap CreateBinaryOcrBitmap()
+ {
+ var firstBitmap = FirstItem.NikseBitmap ?? throw new InvalidOperationException("Expanded OCR group is missing the first bitmap.");
+ var binaryOcrBitmap = new BinaryOcrBitmap(firstBitmap)
+ {
+ X = FirstItem.X,
+ Y = FirstItem.Top,
+ ExpandCount = Count,
+ ExpandedList = new List(),
+ };
+
+ for (var i = 1; i < Items.Count; i++)
+ {
+ var item = Items[i];
+ if (item.NikseBitmap == null)
+ {
+ throw new InvalidOperationException("Expanded OCR group is missing a child bitmap.");
+ }
+
+ binaryOcrBitmap.ExpandedList.Add(new BinaryOcrBitmap(item.NikseBitmap)
+ {
+ X = item.X,
+ Y = item.Top,
+ });
+ }
+
+ return binaryOcrBitmap;
+ }
+}
diff --git a/src/UI/Logic/Ocr/NOcrChar.cs b/src/UI/Logic/Ocr/NOcrChar.cs
index d53a2a07043..6b41c18aea6 100644
--- a/src/UI/Logic/Ocr/NOcrChar.cs
+++ b/src/UI/Logic/Ocr/NOcrChar.cs
@@ -87,6 +87,7 @@ public NOcrChar(ref int position, byte[] file)
}
else
{
+ position++;
ExpandCount = file[position++];
Width = file[position++] << 8 | file[position++];
Height = file[position++] << 8 | file[position++];
@@ -177,9 +178,9 @@ internal void Save(Stream stream)
private bool IsAllByteValues()
{
- return Width <= byte.MaxValue && Height <= byte.MaxValue && ExpandCount < 16 &&
+ return Width <= byte.MaxValue && Height <= byte.MaxValue && MarginTop <= byte.MaxValue && ExpandCount < 16 &&
LinesBackground.Count <= byte.MaxValue && LinesForeground.Count <= byte.MaxValue &&
- IsAllPointByteValues(LinesForeground) && IsAllPointByteValues(LinesForeground);
+ IsAllPointByteValues(LinesForeground) && IsAllPointByteValues(LinesBackground);
}
private static bool IsAllPointByteValues(List lines)
@@ -632,4 +633,4 @@ private static void RemoveDuplicates(List lines)
lines.RemoveAt(i);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/UI/Logic/ShortcutManager.cs b/src/UI/Logic/ShortcutManager.cs
index fe9e9c0799e..af5ccf264ad 100644
--- a/src/UI/Logic/ShortcutManager.cs
+++ b/src/UI/Logic/ShortcutManager.cs
@@ -11,12 +11,21 @@ namespace Nikse.SubtitleEdit.Logic;
public class ShortcutManager : IShortcutManager
{
private readonly HashSet _activeKeys = [];
+ private readonly HashSet _activeEffectiveNames = [];
private readonly List _shortcuts = [];
private FrozenDictionary? _lookupTable;
private bool _isDirty = true;
private bool _isControlPressed = false;
private bool _isShiftPressed = false;
+ // When NumLock is off, numpad navigation keys (e.g. NumPad7) produce the same logical Key as
+ // their non-numpad counterparts (Key.Home). Use the PhysicalKey name to keep them distinct.
+ public static string GetEffectiveKeyName(Key logicalKey, PhysicalKey physicalKey)
+ {
+ var physicalName = physicalKey.ToString();
+ return physicalName.StartsWith("NumPad", StringComparison.Ordinal) ? physicalName : logicalKey.ToString();
+ }
+
public static string GetKeyDisplayName(string key)
{
bool isMac = OperatingSystem.IsMacOS();
@@ -51,6 +60,7 @@ Key.LeftAlt or Key.RightAlt or
Key.LWin or Key.RWin))
{
_activeKeys.Add(e.Key);
+ _activeEffectiveNames.Add(GetEffectiveKeyName(e.Key, e.PhysicalKey));
}
_isControlPressed = e.KeyModifiers.HasFlag(KeyModifiers.Control);
@@ -63,10 +73,12 @@ public void OnKeyReleased(object? sender, KeyEventArgs e)
Key.ImeAccept or Key.ImeModeChange or Key.DeadCharProcessed or Key.None)
{
_activeKeys.Clear();
+ _activeEffectiveNames.Clear();
}
else
{
_activeKeys.Remove(e.Key);
+ _activeEffectiveNames.Remove(GetEffectiveKeyName(e.Key, e.PhysicalKey));
}
_isControlPressed = e.KeyModifiers.HasFlag(KeyModifiers.Control);
@@ -76,6 +88,7 @@ public void OnKeyReleased(object? sender, KeyEventArgs e)
public void ClearKeys()
{
_activeKeys.Clear();
+ _activeEffectiveNames.Clear();
_isControlPressed = false;
_isShiftPressed = false;
}
@@ -125,11 +138,11 @@ private void RebuildLookupTable()
}
// Build the current state key list with initial capacity
- var currentInputKeys = new List(_activeKeys.Count + 2);
+ var currentInputKeys = new List(_activeEffectiveNames.Count + 2);
- foreach (var key in _activeKeys)
+ foreach (var name in _activeEffectiveNames)
{
- currentInputKeys.Add(key.ToString());
+ currentInputKeys.Add(name);
}
// Add normalized modifiers based on the event state
diff --git a/src/UI/Logic/ShortcutsMain.cs b/src/UI/Logic/ShortcutsMain.cs
index 2e10b904088..f238e3f8c75 100644
--- a/src/UI/Logic/ShortcutsMain.cs
+++ b/src/UI/Logic/ShortcutsMain.cs
@@ -340,6 +340,7 @@ private static void AddShortcut(IList list, T command, str
{ nameof(MainViewModel.ZoomLayoutInCommand), Se.Language.Options.Shortcuts.LayoutZoomIn },
{ nameof(MainViewModel.ZoomLayoutOutCommand), Se.Language.Options.Shortcuts.LayoutZoomOut },
{ nameof(MainViewModel.OpenSecondarySubtitleCommand), Se.Language.Video.OpenSecondarySubtitleOnVideoPlayer },
+ { nameof(MainViewModel.ToggleCurrentSubtitleWhilePlayingCommand), Se.Language.Video.ToggleCurrentSubtitleWhilePlaying },
};
private static List GetAllAvailableShortcuts(MainViewModel vm)
@@ -624,6 +625,7 @@ private static List GetAllAvailableShortcuts(MainViewModel vm
AddShortcut(shortcuts, vm.ZoomLayoutInCommand, nameof(vm.ZoomLayoutInCommand), ShortcutCategory.General);
AddShortcut(shortcuts, vm.ZoomLayoutOutCommand, nameof(vm.ZoomLayoutOutCommand), ShortcutCategory.General);
AddShortcut(shortcuts, vm.OpenSecondarySubtitleCommand, nameof(vm.OpenSecondarySubtitleCommand), ShortcutCategory.General);
+ AddShortcut(shortcuts, vm.ToggleCurrentSubtitleWhilePlayingCommand, nameof(vm.ToggleCurrentSubtitleWhilePlayingCommand), ShortcutCategory.General);
return shortcuts;
}
diff --git a/src/UI/Logic/UiUtil.cs b/src/UI/Logic/UiUtil.cs
index 74ca5ed7cb8..42dd41d3e2b 100644
--- a/src/UI/Logic/UiUtil.cs
+++ b/src/UI/Logic/UiUtil.cs
@@ -8,6 +8,7 @@
using Avalonia.Platform;
using Avalonia.Styling;
using CommunityToolkit.Mvvm.Input;
+using Nikse.SubtitleEdit.Features.Shared.ColorPicker;
using Nikse.SubtitleEdit.Logic.Config;
using Nikse.SubtitleEdit.Logic.ValueConverters;
using Projektanker.Icons.Avalonia;
@@ -17,6 +18,7 @@
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
+using System.Reflection;
namespace Nikse.SubtitleEdit.Logic;
@@ -173,26 +175,26 @@ public static Color GetBorderColor()
return new Color(128, color.R, color.G, color.B);
}
- public static Separator MakeVerticalSeperator(double height = 0.5, double opacity = 0.5, Thickness? margin = null,
- IBrush? backgroud = null)
+ public static Separator MakeHorizontalSeparator(double height = 0.5, double opacity = 0.5, Thickness? margin = null,
+ IBrush? background = null)
{
return new Separator
{
Height = height,
Margin = margin ?? new Thickness(5, 1),
- Background = backgroud ?? GetBorderBrush(),
+ Background = background ?? GetBorderBrush(),
Opacity = opacity,
};
}
- public static Border MakeHorizontalSeperator(double width = 2.5, double opacity = 0.5, Thickness? margin = null,
- IBrush? backgroud = null)
+ public static Border MakeVerticalSeparator(double width = 2.5, double opacity = 0.5, Thickness? margin = null,
+ IBrush? background = null)
{
return new Border
{
Width = width,
Margin = margin ?? new Thickness(1, 5),
- Background = backgroud ?? GetBorderBrush(),
+ Background = background ?? GetBorderBrush(),
Opacity = opacity,
VerticalAlignment = VerticalAlignment.Stretch,
HorizontalAlignment = HorizontalAlignment.Center
@@ -1586,6 +1588,53 @@ internal static ColorPicker MakeColorPicker(object vm, string colorPropertyPath)
};
}
+ internal static Button MakeColorPickerButton(object source, string colorPropertyPath, bool showAlpha)
+ {
+ var propInfo = source.GetType().GetProperty(colorPropertyPath, BindingFlags.Public | BindingFlags.Instance);
+ var initialColor = propInfo?.GetValue(source) is Color c ? c : Colors.White;
+
+ var colorSwatch = new Border
+ {
+ Width = 30,
+ Height = 20,
+ CornerRadius = new CornerRadius(CornerRadius),
+ BorderThickness = new Thickness(1),
+ BorderBrush = new SolidColorBrush(Colors.Gray),
+ Background = new SolidColorBrush(initialColor),
+ VerticalAlignment = VerticalAlignment.Center,
+ };
+
+ var button = new Button
+ {
+ Content = colorSwatch,
+ Padding = new Thickness(4, 2),
+ VerticalAlignment = VerticalAlignment.Center,
+ };
+
+ button.Click += async (_, _) =>
+ {
+ if (TopLevel.GetTopLevel(button) is not Window window)
+ {
+ return;
+ }
+
+ var currentColor = propInfo?.GetValue(source) is Color cc ? cc : Colors.White;
+ var vm = new ColorPickerViewModel();
+ vm.Initialize(currentColor);
+ vm.ShowAlpha = showAlpha;
+ var pickerWindow = new ColorPickerWindow(vm);
+ await pickerWindow.ShowDialog(window);
+
+ if (vm.OkPressed)
+ {
+ propInfo?.SetValue(source, vm.SelectedColor);
+ colorSwatch.Background = new SolidColorBrush(vm.SelectedColor);
+ }
+ };
+
+ return button;
+ }
+
internal static Label MakeLabel(string text = "")
{
return new Label
diff --git a/src/UI/Logic/ValueConverters/BoolToFontStyleConverter.cs b/src/UI/Logic/ValueConverters/BoolToFontStyleConverter.cs
new file mode 100644
index 00000000000..ba56b3cce4d
--- /dev/null
+++ b/src/UI/Logic/ValueConverters/BoolToFontStyleConverter.cs
@@ -0,0 +1,29 @@
+using Avalonia.Data.Converters;
+using Avalonia.Media;
+using System;
+using System.Globalization;
+
+namespace Nikse.SubtitleEdit.Logic.ValueConverters;
+
+public class BoolToFontStyleConverter : IValueConverter
+{
+ public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ if (value is bool boolValue)
+ {
+ return boolValue ? FontStyle.Italic : FontStyle.Normal;
+ }
+
+ return FontStyle.Normal;
+ }
+
+ public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ if (value is FontStyle fontStyle)
+ {
+ return fontStyle == FontStyle.Italic;
+ }
+
+ return false;
+ }
+}
diff --git a/src/UI/Logic/VideoPlayers/LibMpvDynamic/LibMpvDynamicNativeControl.cs b/src/UI/Logic/VideoPlayers/LibMpvDynamic/LibMpvDynamicNativeControl.cs
index 7c2c1d9eae3..f0d09c06e78 100644
--- a/src/UI/Logic/VideoPlayers/LibMpvDynamic/LibMpvDynamicNativeControl.cs
+++ b/src/UI/Logic/VideoPlayers/LibMpvDynamic/LibMpvDynamicNativeControl.cs
@@ -22,6 +22,15 @@ public class LibMpvDynamicNativeControl : NativeControlHost
private const uint WS_VISIBLE = 0x10000000;
private const uint WS_CLIPSIBLINGS = 0x04000000;
private const uint WS_CLIPCHILDREN = 0x02000000;
+ private const uint WM_LBUTTONDOWN = 0x0201;
+ private const uint WM_NCHITTEST = 0x0084;
+ private const int GWLP_WNDPROC = -4;
+ private const int HTCLIENT = 1;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate IntPtr WndProcDelegate(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
+ private WndProcDelegate? _customWndProc;
+ private IntPtr _originalWndProc = IntPtr.Zero;
// Linux still needs the temporary hide/show workaround during live resize.
private static bool ShouldHideNativeControlDuringResize => RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
@@ -143,6 +152,12 @@ protected override void DestroyNativeControlCore(IPlatformHandle control)
if (_ownedChildHandle != IntPtr.Zero)
{
+ if (_originalWndProc != IntPtr.Zero)
+ {
+ SetWindowLongPtr(_ownedChildHandle, GWLP_WNDPROC, _originalWndProc);
+ _originalWndProc = IntPtr.Zero;
+ _customWndProc = null;
+ }
DestroyWindow(_ownedChildHandle);
_ownedChildHandle = IntPtr.Zero;
}
@@ -181,6 +196,9 @@ private IntPtr CreateRenderTargetHandle(IntPtr parentHandle)
return parentHandle;
}
+ _customWndProc = CustomWndProc;
+ _originalWndProc = SetWindowLongPtr(_ownedChildHandle, GWLP_WNDPROC, Marshal.GetFunctionPointerForDelegate(_customWndProc));
+
return _ownedChildHandle;
}
@@ -271,6 +289,40 @@ private static extern IntPtr CreateWindowExW(
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool DestroyWindow(IntPtr hWnd);
+ [DllImport("user32.dll", SetLastError = true)]
+ private static extern IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
+
+ [DllImport("user32.dll")]
+ private static extern IntPtr CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
+
+ private IntPtr CustomWndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam)
+ {
+ if (msg == WM_NCHITTEST)
+ {
+ // The STATIC window class returns HTTRANSPARENT by default, which forwards
+ // all mouse messages to the parent HWND before they reach this WndProc.
+ // Returning HTCLIENT makes the window opaque to mouse input so that
+ // WM_LBUTTONDOWN is actually delivered here.
+ return new IntPtr(HTCLIENT);
+ }
+ if (msg == WM_LBUTTONDOWN)
+ {
+ Dispatcher.UIThread.Post(TogglePlayPause);
+ }
+ return CallWindowProc(_originalWndProc, hWnd, msg, wParam, lParam);
+ }
+
+ protected override void OnPointerPressed(PointerPressedEventArgs e)
+ {
+ base.OnPointerPressed(e);
+ if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows) &&
+ e.GetCurrentPoint(this).Properties.IsLeftButtonPressed)
+ {
+ TogglePlayPause();
+ e.Handled = true;
+ }
+ }
+
public void LoadFile(string path)
{
_mpvPlayer?.LoadFile(path);
diff --git a/src/UI/Logic/VideoPlayers/LibVlcDynamic/LibVlcDynamicPlayer.cs b/src/UI/Logic/VideoPlayers/LibVlcDynamic/LibVlcDynamicPlayer.cs
index 46ae3a029a6..4c71da787d7 100644
--- a/src/UI/Logic/VideoPlayers/LibVlcDynamic/LibVlcDynamicPlayer.cs
+++ b/src/UI/Logic/VideoPlayers/LibVlcDynamic/LibVlcDynamicPlayer.cs
@@ -67,7 +67,15 @@ public sealed class LibVlcDynamicPlayer : IDisposable, IVideoPlayerInstance
private delegate long libvlc_media_get_duration(IntPtr media);
private libvlc_media_get_duration? _libvlc_media_get_duration;
- // LibVLC Video Controls - http://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc__video.html#g8f55326b8b51aecb59d8b8a446c3f118
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ private delegate void libvlc_media_add_option(IntPtr media, byte[] options);
+ private libvlc_media_add_option? _libvlc_media_add_option;
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ private delegate void libvlc_media_player_set_media(IntPtr mediaPlayer, IntPtr media);
+ private libvlc_media_player_set_media? _libvlc_media_player_set_media;
+
+ // LibVLC Video Controls
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate void libvlc_video_get_size(IntPtr mediaPlayer, UInt32 number, out UInt32 x, out UInt32 y);
private libvlc_video_get_size? _libvlc_video_get_size;
@@ -186,6 +194,10 @@ public sealed class LibVlcDynamicPlayer : IDisposable, IVideoPlayerInstance
private delegate int libvlc_video_set_spu(IntPtr mediaPlayer, int trackNumber);
private libvlc_video_set_spu? _libvlc_video_set_spu;
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ private delegate IntPtr libvlc_video_get_spu_description(IntPtr mediaPlayer);
+ private libvlc_video_get_spu_description? _libvlc_video_get_spu_description;
+
///
/// Callback prototype to allocate and lock a picture buffer. Whenever a new video frame needs to be decoded, the lock callback is invoked. Depending on the video chroma, one or three pixel planes of adequate dimensions must be returned via the second parameter. Those planes must be aligned on 32-bytes boundaries.
///
@@ -310,9 +322,12 @@ private void LoadLibVlcMethods()
_libvlc_media_release = (libvlc_media_release)GetDllType(typeof(libvlc_media_release), "libvlc_media_release");
_libvlc_media_parse_with_options = (libvlc_media_parse_with_options)GetDllType(typeof(libvlc_media_parse_with_options), "libvlc_media_parse_with_options");
_libvlc_media_get_duration = (libvlc_media_get_duration)GetDllType(typeof(libvlc_media_get_duration), "libvlc_media_get_duration");
+ _libvlc_media_add_option = (libvlc_media_add_option)GetDllType(typeof(libvlc_media_add_option), "libvlc_media_add_option");
+ _libvlc_media_player_set_media = (libvlc_media_player_set_media)GetDllType(typeof(libvlc_media_player_set_media), "libvlc_media_player_set_media");
_libvlc_video_get_size = (libvlc_video_get_size)GetDllType(typeof(libvlc_video_get_size), "libvlc_video_get_size");
_libvlc_video_set_spu = (libvlc_video_set_spu)GetDllType(typeof(libvlc_video_set_spu), "libvlc_video_set_spu");
+ _libvlc_video_get_spu_description = (libvlc_video_get_spu_description)GetDllType(typeof(libvlc_video_get_spu_description), "libvlc_video_get_spu_description");
_libvlc_video_set_callbacks = (libvlc_video_set_callbacks)GetDllType(typeof(libvlc_video_set_callbacks), "libvlc_video_set_callbacks");
_libvlc_video_set_format = (libvlc_video_set_format)GetDllType(typeof(libvlc_video_set_format), "libvlc_video_set_format");
_libvlc_video_take_snapshot = (libvlc_video_take_snapshot)GetDllType(typeof(libvlc_video_take_snapshot), "libvlc_video_take_snapshot");
@@ -399,6 +414,132 @@ private bool LoadLibraryInternal()
return false;
}
+ private string? _currentSubtitleFileName;
+
+ private int _slaveCount = 0;
+
+ public async Task SubAdd(string fileName)
+ {
+ _currentSubtitleFileName = fileName;
+
+ if (_mediaPlayer == IntPtr.Zero || _libvlc_media_player_add_slave == null)
+ return;
+
+ // --- HYBRID LOGIC ---
+ // If we've added more than 100 slaves, the track list is getting messy.
+ // Let's do a full media refresh to clear the internal VLC cache.
+ if (_slaveCount > 100)
+ {
+ await HardReloadWithSub(fileName);
+ return;
+ }
+
+ await Task.Run(() =>
+ {
+ try
+ {
+ string uriPath = PathToUri(fileName);
+ byte[] pathBytes = GetUtf8Bytes(uriPath);
+
+ int result = _libvlc_media_player_add_slave(_mediaPlayer, 0, pathBytes, true);
+
+ if (result == 0)
+ {
+ _slaveCount++; // Increment our tracker
+
+ // Small delay to ensure VLC registered the new track
+ System.Threading.Thread.Sleep(50);
+
+ // Find the highest ID to ensure we show the LATEST version of the file
+ int newestId = GetHighestSpuId();
+ if (newestId != -1)
+ {
+ _libvlc_video_set_spu?.Invoke(_mediaPlayer, newestId);
+ }
+
+ // Force a frame refresh by "nudging" the time
+ long currentTime = _libvlc_media_player_get_time?.Invoke(_mediaPlayer) ?? 0;
+
+ // Seeking to the exact same time often works,
+ // but +1ms is a guaranteed trigger for the subtitle decoder.
+ _libvlc_media_player_set_time?.Invoke(_mediaPlayer, currentTime + 1);
+ }
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"SubAdd Error: {ex.Message}");
+ }
+ });
+ }
+
+ private int GetHighestSpuId()
+ {
+ IntPtr pTrackList = _libvlc_video_get_spu_description?.Invoke(_mediaPlayer) ?? IntPtr.Zero;
+ if (pTrackList == IntPtr.Zero) return -1;
+
+ int highestId = -1;
+ IntPtr pCurrent = pTrackList;
+
+ while (pCurrent != IntPtr.Zero)
+ {
+ var track = Marshal.PtrToStructure(pCurrent);
+ if (track.Id > highestId) highestId = track.Id;
+ pCurrent = track.PNext;
+ }
+
+ _libvlc_track_description_release?.Invoke(pTrackList);
+ return highestId;
+ }
+
+ private async Task HardReloadWithSub(string subFileName)
+ {
+ // Save current state
+ long currentTime = _libvlc_media_player_get_time?.Invoke(_mediaPlayer) ?? 0;
+ bool wasPlaying = IsPlaying;
+
+ // Reset the counter
+ _slaveCount = 0;
+
+ // Re-load the video (this destroys the old media and its 100 slaves)
+ await LoadFile(_fileName);
+
+ // Restore time
+ _libvlc_media_player_set_time?.Invoke(_mediaPlayer, currentTime);
+
+ // Add the sub fresh (it will now be ID 1 again)
+ await SubAdd(subFileName);
+
+ if (wasPlaying) Play();
+ }
+
+ private static string PathToUri(string path)
+ {
+ // libvlc_media_player_add_slave expects a URI, not a raw file path
+ if (path.StartsWith("file://", StringComparison.OrdinalIgnoreCase))
+ {
+ return path;
+ }
+
+ return new Uri(path).AbsoluteUri;
+ }
+
+ public void SubRemove()
+ {
+ if (_mediaPlayer == IntPtr.Zero || _libvlc_video_set_spu == null) return;
+
+ // -1 disables subtitle rendering
+ _libvlc_video_set_spu(_mediaPlayer, -1);
+ }
+
+ public async Task SubReload()
+ {
+ if (!string.IsNullOrEmpty(_currentSubtitleFileName))
+ {
+ SubRemove(); // Clear current view
+ await SubAdd(_currentSubtitleFileName); // Inject fresh file
+ }
+ }
+
public void LoadLib()
{
if (_library == IntPtr.Zero)
@@ -888,7 +1029,7 @@ public double Speed
_libvlc_audio_set_track(_mediaPlayer, next.id);
return new AudioTrackInfo()
- {
+ {
FfIndex = next.id,
Id = next.id,
Title = next.name,
diff --git a/src/UI/Program.cs b/src/UI/Program.cs
index d5d53f739b1..d38753e1429 100644
--- a/src/UI/Program.cs
+++ b/src/UI/Program.cs
@@ -91,6 +91,11 @@ public static void Main(string[] args)
private static void ConfigureApplication(AppBuilder b, ClassicDesktopStyleApplicationLifetime lifetime)
{
+ if (b.Instance is not { } app)
+ {
+ return;
+ }
+
// Setup Fluent theme
UiTheme.FluentTheme = new FluentTheme();
UiTheme.FluentTheme.Palettes.Add(ThemeVariant.Dark, new ColorPaletteResources()
@@ -98,54 +103,33 @@ private static void ConfigureApplication(AppBuilder b, ClassicDesktopStyleApplic
RegionColor = UiUtil.GetDarkThemeBackgroundColor(),
});
- if (b.Instance != null)
- {
- b.Instance.Styles.Add(UiTheme.FluentTheme);
- }
+ app.Styles.Add(UiTheme.FluentTheme);
- // Add DataGrid styles
- if (b.Instance != null)
+ // Add DataGrid, AvaloniaEdit, and ColorPicker styles
+ app.Styles.Add(new StyleInclude(new Uri("avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml", UriKind.Absolute))
{
- b.Instance.Styles.Add(new StyleInclude(new Uri("avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml", UriKind.Absolute))
- {
- Source = new Uri("avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml")
- });
- }
+ Source = new Uri("avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml")
+ });
- if (b.Instance != null)
+ app.Styles.Add(new StyleInclude(new Uri("avares://AvaloniaEdit/Themes/Fluent/AvaloniaEdit.xaml", UriKind.Absolute))
{
- b.Instance.Styles.Add(new StyleInclude(new Uri("avares://AvaloniaEdit/Themes/Fluent/AvaloniaEdit.xaml", UriKind.Absolute))
- {
- Source = new Uri("avares://AvaloniaEdit/Themes/Fluent/AvaloniaEdit.xaml")
- });
- }
+ Source = new Uri("avares://AvaloniaEdit/Themes/Fluent/AvaloniaEdit.xaml")
+ });
- // Add ColorPicker styles
- if (b.Instance != null)
+ app.Styles.Add(new StyleInclude(new Uri("avares://Avalonia.Controls.ColorPicker/Themes/Fluent/Fluent.xaml", UriKind.Absolute))
{
- b.Instance.Styles.Add(new StyleInclude(new Uri("avares://Avalonia.Controls.ColorPicker/Themes/Fluent/Fluent.xaml", UriKind.Absolute))
- {
- Source = new Uri("avares://Avalonia.Controls.ColorPicker/Themes/Fluent/Fluent.xaml", UriKind.Absolute)
- });
- }
+ Source = new Uri("avares://Avalonia.Controls.ColorPicker/Themes/Fluent/Fluent.xaml", UriKind.Absolute)
+ });
// Set custom font
- if (Application.Current != null && !string.IsNullOrEmpty(Se.Settings.Appearance.FontName))
+ if (!string.IsNullOrEmpty(Se.Settings.Appearance.FontName))
{
UiUtil.SetFontName(Se.Settings.Appearance.FontName);
}
- // Set application name
- if (b.Instance != null)
- {
- b.Instance.Name = "Subtitle Edit";
- }
+ app.Name = "Subtitle Edit";
- // Setup native menu
- if (b.Instance != null)
- {
- SetupNativeMenu(b.Instance, lifetime);
- }
+ SetupNativeMenu(app, lifetime);
}
private static void SetupNativeMenu(Application app, ClassicDesktopStyleApplicationLifetime lifetime)
diff --git a/src/UI/UI.csproj b/src/UI/UI.csproj
index bd74c6094af..934302d9c10 100644
--- a/src/UI/UI.csproj
+++ b/src/UI/UI.csproj
@@ -39,14 +39,14 @@
-
+
-
+
@@ -68,12 +68,18 @@
+
+
+
+
+
+
@@ -93,13 +99,19 @@
+
+
+
+
+
+
diff --git a/src/UI/packages.lock.json b/src/UI/packages.lock.json
index 88beac3761a..a1f5d10670a 100644
--- a/src/UI/packages.lock.json
+++ b/src/UI/packages.lock.json
@@ -112,11 +112,11 @@
},
"Google.Cloud.TextToSpeech.V1": {
"type": "Direct",
- "requested": "[3.17.0, )",
- "resolved": "3.17.0",
- "contentHash": "27vM1NEBmCqAwqagwS0aEHfRBrFy7z6Ef+BblwKMaxtUUY0amdUdeXLY/PU8RSIHtJoan1K6ZKIS6YYqzgp77g==",
+ "requested": "[3.18.0, )",
+ "resolved": "3.18.0",
+ "contentHash": "54/+RASsfltysLSgpNaSkdSa1uEvKD5Wc8hHFtlSRQtJAh41QNaSqY0LmZfFF+oEZiMBuhB2uq7bwieywttVvQ==",
"dependencies": {
- "Google.Api.Gax.Grpc": "[4.12.1, 5.0.0)",
+ "Google.Api.Gax.Grpc": "[4.13.1, 5.0.0)",
"Google.LongRunning": "[3.5.0, 4.0.0)"
}
},
@@ -178,9 +178,9 @@
},
"SharpCompress": {
"type": "Direct",
- "requested": "[0.47.3, )",
- "resolved": "0.47.3",
- "contentHash": "KPODbBWz4zRs413KAHgy7N43bXCsAJyrCJMTajRan3Gl4epukJQKQxZeK1FVq/VvRZ4Y1MLz4Jc5UYSokwEojQ=="
+ "requested": "[0.47.4, )",
+ "resolved": "0.47.4",
+ "contentHash": "0s2rmGFLFQED6ERPUtJiT/KoDsrBzsc+qDoVX1XT4HfAiLZCtV6Z9mHfArBgHVpDErl4Pt9M5VTMVQLPUJw5Kg=="
},
"Simplecto.Avalonia.RichTextBox": {
"type": "Direct",
@@ -345,8 +345,8 @@
},
"Google.Api.Gax": {
"type": "Transitive",
- "resolved": "4.12.1",
- "contentHash": "G62dRNOv5DolfRviT6CCrL2a5nZ/CWWdRzhADkGnpCkYSOc3QnH5xxRvZiOKuHU8weJ/pAqAqrj7+T9IWdlu2Q==",
+ "resolved": "4.13.1",
+ "contentHash": "ujDpZk7O2VqAEIqcSlhH0FKzVpGZWly/qcNjHxpNUrL445Tei9PHnu4V1pwW2WDiMDvo3TpL1Bi4DeU525Afrg==",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "6.0.0",
"Newtonsoft.Json": "13.0.4"
@@ -354,12 +354,12 @@
},
"Google.Api.Gax.Grpc": {
"type": "Transitive",
- "resolved": "4.12.1",
- "contentHash": "W3LjuitOWxWyvbwqeHvpgp0LdshEiTnw/pneDAfAhQ02VgU2gVEzSXfGNPsvL8hDPBXjngR/fWNme8Kungwwkw==",
+ "resolved": "4.13.1",
+ "contentHash": "QgYF0bd8z6xWSVLGkGAMPB70seJSa9J02lFn8LT0Rb7PjSxZYpX+wU6LbVmghxDi6Wd64taulpX37pFq20J61g==",
"dependencies": {
"Google.Api.CommonProtos": "2.17.0",
- "Google.Api.Gax": "4.12.1",
- "Google.Apis.Auth": "1.72.0",
+ "Google.Api.Gax": "4.13.1",
+ "Google.Apis.Auth": "1.73.0",
"Grpc.Auth": "[2.71.0, 3.0.0)",
"Grpc.Core.Api": "[2.71.0, 3.0.0)",
"Grpc.Net.Client": "[2.71.0, 3.0.0)",
@@ -368,26 +368,26 @@
},
"Google.Apis": {
"type": "Transitive",
- "resolved": "1.72.0",
- "contentHash": "QbSJ08W7QuqsfzDPOZDHl1aFzCYwMcfBoHqQRh7koglwDN5WacShCKYMpU/zR1Pf3h3sH6JTGEeM/txAxaJuEg==",
+ "resolved": "1.73.0",
+ "contentHash": "TnCjEyV2aCLQ6Zl40OCbEJULDuEkEWc6C/g81KYw5l1PqGo+G7pFZrV+YH8XgUL0JRUanz+IrUp8SsKF4dzkqg==",
"dependencies": {
- "Google.Apis.Core": "1.72.0"
+ "Google.Apis.Core": "1.73.0"
}
},
"Google.Apis.Auth": {
"type": "Transitive",
- "resolved": "1.72.0",
- "contentHash": "RBoFwFKBHKUjuyJf2weEnqICQLaY0TdIrdFv2yC8bsiR2VFYxizOn3C/qN1FWCCb0Uh9GhW+zwAV1yUxPjiocw==",
+ "resolved": "1.73.0",
+ "contentHash": "wEu12uhnRv3zrPBSqv4E2vPH6lYLtc1RPAnU9MJRCMFlBVwZ7Lnq3NfbYXi6VG7EurkYInTaMpeBZkbM/HrAog==",
"dependencies": {
- "Google.Apis": "1.72.0",
- "Google.Apis.Core": "1.72.0",
+ "Google.Apis": "1.73.0",
+ "Google.Apis.Core": "1.73.0",
"System.Management": "7.0.2"
}
},
"Google.Apis.Core": {
"type": "Transitive",
- "resolved": "1.72.0",
- "contentHash": "ZmYX1PU0vTKFT42c7gp4zaYcb/0TFAXrt9qw8yEz0wjvaug85+/WddlPTfT525Qei8iIUsF6t4bHYrsb2O7crg==",
+ "resolved": "1.73.0",
+ "contentHash": "vSc7CY4KCP7HE4QTElDx/ExnGLbg9kXb89MS6cdvI+0D4sxvTYb16vGtXmF2jSDMV3iDmykSXdIUPTz8TDS6gg==",
"dependencies": {
"Newtonsoft.Json": "13.0.4"
}
diff --git a/src/libse/AutoTranslate/GeminiTranslate.cs b/src/libse/AutoTranslate/GeminiTranslate.cs
index f25f66bae9e..c7886692f4c 100644
--- a/src/libse/AutoTranslate/GeminiTranslate.cs
+++ b/src/libse/AutoTranslate/GeminiTranslate.cs
@@ -6,7 +6,6 @@
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
-using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
diff --git a/src/libse/SubtitleFormats/Ayato.cs b/src/libse/SubtitleFormats/Ayato.cs
index 702d6b078df..6a55e5b08cc 100644
--- a/src/libse/SubtitleFormats/Ayato.cs
+++ b/src/libse/SubtitleFormats/Ayato.cs
@@ -1,4 +1,5 @@
using Nikse.SubtitleEdit.Core.Common;
+using Nikse.SubtitleEdit.Core.Interfaces;
using System;
using System.Collections.Generic;
using System.IO;
@@ -6,7 +7,7 @@
namespace Nikse.SubtitleEdit.Core.SubtitleFormats
{
- public class Ayato : SubtitleFormat
+ public class Ayato : SubtitleFormat, IBinaryPersistableSubtitle
{
public override string Extension => ".aya";
@@ -35,135 +36,146 @@ public override string ToText(Subtitle subtitle, string title)
throw new NotImplementedException();
}
+ public bool Save(string fileName, Stream stream, Subtitle subtitle, bool batchMode)
+ {
+ WriteToStream(stream, subtitle);
+ return true;
+ }
+
public void Save(string fileName, string videoFileName, Subtitle subtitle)
{
using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
- // header
- var header = new byte[2713];
- header[00] = 0x05;
- header[01] = 0x30;
- header[02] = 0x32;
- header[03] = 0x2E;
- header[04] = 0x30;
- header[05] = 0x33;
- header[06] = 0x05;
- header[07] = 0x41;
- header[08] = 0x79;
- header[09] = 0x61;
- header[10] = 0x74;
- header[11] = 0x6F;
- header[12] = 0x02;
- header[77] = 0x01;
- header[81] = 0x01;
- header[608] = 0x3b;
- header[609] = 0x32;
- header[613] = 0x58;
- header[614] = 0x02;
- header[615] = 0xE8;
- header[616] = 0x03;
- header[617] = 0xE8;
- header[618] = 0x03;
- header[619] = 0xE8;
- header[620] = 0x03;
- header[621] = 0xE8;
- header[622] = 0x03;
- header[639] = 0x02;
-
- header[682] = (byte)(subtitle.Paragraphs.Count & 0xff);
- header[683] = (byte)((subtitle.Paragraphs.Count >> 8) & 0xff);
-
- header[686] = 0x09;
- header[687] = 0x04;
-
- header[751] = 0x08;
-
- header[760] = 0x01;
- header[761] = 0x0a;
-
- header[830] = 0x58;
- header[831] = 0x48;
-
- header[2048] = 0x99;
- header[2049] = 0x02;
-
- header[2050] = (byte)(subtitle.Paragraphs.Count & 0xff);
- header[2051] = (byte)((subtitle.Paragraphs.Count >> 8) & 0xff);
-
- header[2069] = 0x17;
- header[2071] = 0x17;
- header[2073] = 0x02;
- header[2075] = 0x27;
- header[2077] = 0x0c;
- header[2079] = 0x04;
-
- header[2082] = 0x01;
- header[2085] = 0x01;
-
- // Microsoft Sans Serif
- header[2088] = 0x4d;
- header[2089] = 0x69;
- header[2090] = 0x63;
- header[2091] = 0x72;
- header[2092] = 0x6f;
- header[2093] = 0x73;
- header[2094] = 0x6f;
- header[2095] = 0x66;
- header[2096] = 0x74;
- header[2097] = 0x20;
- header[2098] = 0x53;
- header[2099] = 0x61;
- header[2100] = 0x6e;
- header[2101] = 0x73;
- header[2102] = 0x20;
- header[2103] = 0x53;
- header[2104] = 0x65;
- header[2105] = 0x72;
- header[2106] = 0x69;
- header[2107] = 0x66;
-
- header[2120] = 0x1f;
- header[2123] = 0x01;
- header[2124] = 0x02;
-
- header[2128] = 0xff;
- header[2136] = 0x02;
- header[2176] = 0x01;
- header[2193] = 0x02;
- header[2194] = 0x02;
-
- header[2197] = 0x0C;
- header[2198] = 0x14;
- header[2199] = 0x0C;
- header[2200] = 0x01;
- header[2201] = 0xe8;
- header[2202] = 0x03;
- header[2203] = 0xe8;
- header[2204] = 0x03;
- header[2205] = 0xe8;
- header[2206] = 0x03;
- header[2207] = 0xe8;
- header[2208] = 0x03;
-
- header[2225] = 0x13;
- header[2226] = 0x08;
- header[2227] = 0xdf;
- header[2228] = 0x07;
- header[2229] = 0x13;
- header[2230] = 0x08;
- header[2231] = 0xdf;
- header[2232] = 0x07;
-
- fs.Write(header, 0, header.Length);
-
- // paragraphs
- var sub = new Subtitle(subtitle);
- int number = 1;
- foreach (Paragraph p in sub.Paragraphs)
- {
- WriteParagraph(fs, p, number);
- number++;
- }
+ WriteToStream(fs, subtitle);
+ }
+ }
+
+ private static void WriteToStream(Stream fs, Subtitle subtitle)
+ {
+ // header
+ var header = new byte[2713];
+ header[00] = 0x05;
+ header[01] = 0x30;
+ header[02] = 0x32;
+ header[03] = 0x2E;
+ header[04] = 0x30;
+ header[05] = 0x33;
+ header[06] = 0x05;
+ header[07] = 0x41;
+ header[08] = 0x79;
+ header[09] = 0x61;
+ header[10] = 0x74;
+ header[11] = 0x6F;
+ header[12] = 0x02;
+ header[77] = 0x01;
+ header[81] = 0x01;
+ header[608] = 0x3b;
+ header[609] = 0x32;
+ header[613] = 0x58;
+ header[614] = 0x02;
+ header[615] = 0xE8;
+ header[616] = 0x03;
+ header[617] = 0xE8;
+ header[618] = 0x03;
+ header[619] = 0xE8;
+ header[620] = 0x03;
+ header[621] = 0xE8;
+ header[622] = 0x03;
+ header[639] = 0x02;
+
+ header[682] = (byte)(subtitle.Paragraphs.Count & 0xff);
+ header[683] = (byte)((subtitle.Paragraphs.Count >> 8) & 0xff);
+
+ header[686] = 0x09;
+ header[687] = 0x04;
+
+ header[751] = 0x08;
+
+ header[760] = 0x01;
+ header[761] = 0x0a;
+
+ header[830] = 0x58;
+ header[831] = 0x48;
+
+ header[2048] = 0x99;
+ header[2049] = 0x02;
+
+ header[2050] = (byte)(subtitle.Paragraphs.Count & 0xff);
+ header[2051] = (byte)((subtitle.Paragraphs.Count >> 8) & 0xff);
+
+ header[2069] = 0x17;
+ header[2071] = 0x17;
+ header[2073] = 0x02;
+ header[2075] = 0x27;
+ header[2077] = 0x0c;
+ header[2079] = 0x04;
+
+ header[2082] = 0x01;
+ header[2085] = 0x01;
+
+ // Microsoft Sans Serif
+ header[2088] = 0x4d;
+ header[2089] = 0x69;
+ header[2090] = 0x63;
+ header[2091] = 0x72;
+ header[2092] = 0x6f;
+ header[2093] = 0x73;
+ header[2094] = 0x6f;
+ header[2095] = 0x66;
+ header[2096] = 0x74;
+ header[2097] = 0x20;
+ header[2098] = 0x53;
+ header[2099] = 0x61;
+ header[2100] = 0x6e;
+ header[2101] = 0x73;
+ header[2102] = 0x20;
+ header[2103] = 0x53;
+ header[2104] = 0x65;
+ header[2105] = 0x72;
+ header[2106] = 0x69;
+ header[2107] = 0x66;
+
+ header[2120] = 0x1f;
+ header[2123] = 0x01;
+ header[2124] = 0x02;
+
+ header[2128] = 0xff;
+ header[2136] = 0x02;
+ header[2176] = 0x01;
+ header[2193] = 0x02;
+ header[2194] = 0x02;
+
+ header[2197] = 0x0C;
+ header[2198] = 0x14;
+ header[2199] = 0x0C;
+ header[2200] = 0x01;
+ header[2201] = 0xe8;
+ header[2202] = 0x03;
+ header[2203] = 0xe8;
+ header[2204] = 0x03;
+ header[2205] = 0xe8;
+ header[2206] = 0x03;
+ header[2207] = 0xe8;
+ header[2208] = 0x03;
+
+ header[2225] = 0x13;
+ header[2226] = 0x08;
+ header[2227] = 0xdf;
+ header[2228] = 0x07;
+ header[2229] = 0x13;
+ header[2230] = 0x08;
+ header[2231] = 0xdf;
+ header[2232] = 0x07;
+
+ fs.Write(header, 0, header.Length);
+
+ // paragraphs
+ var sub = new Subtitle(subtitle);
+ int number = 1;
+ foreach (Paragraph p in sub.Paragraphs)
+ {
+ WriteParagraph(fs, p, number);
+ number++;
}
}
diff --git a/src/libse/SubtitleFormats/LambdaCap.cs b/src/libse/SubtitleFormats/LambdaCap.cs
index 2b8cf042fb2..368e567c66d 100644
--- a/src/libse/SubtitleFormats/LambdaCap.cs
+++ b/src/libse/SubtitleFormats/LambdaCap.cs
@@ -72,7 +72,7 @@ public override string ToText(Subtitle subtitle, string title)
private static string EncodeTimeCode(TimeCode time)
{
- return time.ToHHMMSSFF().RemoveChar(':'); // HHMMSSFF without seperators, like 00031522
+ return time.ToHHMMSSFF().RemoveChar(':'); // HHMMSSFF without separators, like 00031522
}
private static string EncodeStyle(string text)
diff --git a/src/seconv/Commands/ConvertCommand.cs b/src/seconv/Commands/ConvertCommand.cs
index 28f4026094e..d082d344c45 100644
--- a/src/seconv/Commands/ConvertCommand.cs
+++ b/src/seconv/Commands/ConvertCommand.cs
@@ -179,7 +179,7 @@ public sealed class Settings : CommandSettings
public bool SplitLongLines { get; init; }
}
- public override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken)
+ protected override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken)
{
try
{
diff --git a/src/seconv/Commands/FormatsCommand.cs b/src/seconv/Commands/FormatsCommand.cs
index 1b42fbac232..5f5588b35d4 100644
--- a/src/seconv/Commands/FormatsCommand.cs
+++ b/src/seconv/Commands/FormatsCommand.cs
@@ -12,7 +12,7 @@ public sealed class Settings : CommandSettings
{
}
- public override int Execute(CommandContext context, Settings settings, CancellationToken cancellationToken)
+ protected override int Execute(CommandContext context, Settings settings, CancellationToken cancellationToken)
{
AnsiConsole.MarkupLine("[bold cyan]Available Subtitle Formats[/]");
AnsiConsole.WriteLine();
diff --git a/src/seconv/Program.cs b/src/seconv/Program.cs
index 3dd96bc2cc1..5cc575ebfb3 100644
--- a/src/seconv/Program.cs
+++ b/src/seconv/Program.cs
@@ -25,7 +25,7 @@ static int Main(string[] args)
args[0].Equals("--formats", StringComparison.OrdinalIgnoreCase)))
{
var formatsCommand = new FormatsCommand();
- return formatsCommand.Execute(null!, new FormatsCommand.Settings(), CancellationToken.None);
+ return ((ICommand)formatsCommand).ExecuteAsync(null!, new FormatsCommand.Settings(), CancellationToken.None).GetAwaiter().GetResult();
}
// Set up Spectre.Console CLI with default command
diff --git a/src/seconv/SeConv.csproj b/src/seconv/SeConv.csproj
index 5a7dedd106c..8c0e6dc1438 100644
--- a/src/seconv/SeConv.csproj
+++ b/src/seconv/SeConv.csproj
@@ -9,8 +9,8 @@
-
-
+
+
diff --git a/tests/UI/Logic/Ocr/ExpandedOcrGroupTests.cs b/tests/UI/Logic/Ocr/ExpandedOcrGroupTests.cs
new file mode 100644
index 00000000000..a45111fd2b6
--- /dev/null
+++ b/tests/UI/Logic/Ocr/ExpandedOcrGroupTests.cs
@@ -0,0 +1,73 @@
+using Nikse.SubtitleEdit.Logic.Ocr;
+
+namespace UITests.Logic.Ocr;
+
+public class ExpandedOcrGroupTests
+{
+ [Fact]
+ public void CreateNOcrChar_UsesCombinedPreviewSizeAndRelativeTopMargin()
+ {
+ var sourceBitmap = new NikseBitmap2(40, 40);
+ var letters = new List
+ {
+ CreateLetter(10, 12, 8, 4, 5),
+ CreateLetter(15, 10, 6, 3, 7),
+ };
+
+ var group = ExpandedOcrGroup.Create(sourceBitmap, letters, 0, 2);
+
+ Assert.NotNull(group);
+ var actualGroup = Assert.IsType(group);
+ Assert.Equal(8, actualGroup.PreviewBitmap.Width);
+ Assert.Equal(7, actualGroup.PreviewBitmap.Height);
+ Assert.Equal(2, actualGroup.PreviewTopMargin);
+
+ var nOcrChar = actualGroup.CreateNOcrChar();
+ Assert.Equal(8, nOcrChar.Width);
+ Assert.Equal(7, nOcrChar.Height);
+ Assert.Equal(2, nOcrChar.MarginTop);
+ Assert.Equal(2, nOcrChar.ExpandCount);
+ }
+
+ [Fact]
+ public void CreateBinaryOcrBitmap_KeepsFirstGlyphPersistedAndStoresExpandedChildren()
+ {
+ var sourceBitmap = new NikseBitmap2(50, 40);
+ var letters = new List
+ {
+ CreateLetter(10, 12, 8, 4, 5),
+ CreateLetter(15, 10, 6, 3, 7),
+ CreateLetter(19, 11, 7, 2, 6),
+ };
+
+ var group = ExpandedOcrGroup.Create(sourceBitmap, letters, 0, 3);
+
+ Assert.NotNull(group);
+ var actualGroup = Assert.IsType(group);
+ var firstBitmap = Assert.IsType(letters[0].NikseBitmap);
+ Assert.True(actualGroup.PreviewBitmap.Width > firstBitmap.Width);
+
+ var binaryOcrBitmap = actualGroup.CreateBinaryOcrBitmap();
+ Assert.Equal(firstBitmap.Width, binaryOcrBitmap.Width);
+ Assert.Equal(firstBitmap.Height, binaryOcrBitmap.Height);
+ Assert.Equal(letters[0].X, binaryOcrBitmap.X);
+ Assert.Equal(letters[0].Top, binaryOcrBitmap.Y);
+ Assert.Equal(3, binaryOcrBitmap.ExpandCount);
+ Assert.Equal(2, binaryOcrBitmap.ExpandedList.Count);
+ Assert.Equal(letters[1].X, binaryOcrBitmap.ExpandedList[0].X);
+ Assert.Equal(letters[1].Top, binaryOcrBitmap.ExpandedList[0].Y);
+ Assert.Equal(letters[2].X, binaryOcrBitmap.ExpandedList[1].X);
+ Assert.Equal(letters[2].Top, binaryOcrBitmap.ExpandedList[1].Y);
+ }
+
+ private static ImageSplitterItem2 CreateLetter(int x, int y, int top, int width, int height)
+ {
+ var item = new ImageSplitterItem2(x, y, new NikseBitmap2(width, height))
+ {
+ Top = top,
+ ParentY = y,
+ };
+
+ return item;
+ }
+}
diff --git a/tests/UI/Logic/Ocr/NOcrCharTests.cs b/tests/UI/Logic/Ocr/NOcrCharTests.cs
new file mode 100644
index 00000000000..09adcdbfe55
--- /dev/null
+++ b/tests/UI/Logic/Ocr/NOcrCharTests.cs
@@ -0,0 +1,145 @@
+using Nikse.SubtitleEdit.Logic.Ocr;
+
+namespace UITests.Logic.Ocr;
+
+public class NOcrCharTests
+{
+ private static NOcrChar SaveAndReload(NOcrChar original)
+ {
+ var fileName = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + ".nocr");
+ try
+ {
+ var db1 = new NOcrDb(fileName);
+ db1.Add(original);
+ db1.Save();
+
+ var db2 = new NOcrDb(fileName);
+ return original.ExpandCount > 0
+ ? db2.OcrCharactersExpanded[0]
+ : db2.OcrCharacters[0];
+ }
+ finally
+ {
+ if (File.Exists(fileName))
+ {
+ File.Delete(fileName);
+ }
+ }
+ }
+
+ [Fact]
+ public void SaveLoad_FewLines_RoundTripsCorrectly()
+ {
+ var original = new NOcrChar("A")
+ {
+ Width = 10,
+ Height = 20,
+ MarginTop = 5,
+ Italic = true,
+ };
+ original.LinesForeground.Add(new NOcrLine(new OcrPoint(1, 2), new OcrPoint(8, 15)));
+ original.LinesForeground.Add(new NOcrLine(new OcrPoint(3, 5), new OcrPoint(7, 18)));
+ original.LinesBackground.Add(new NOcrLine(new OcrPoint(0, 0), new OcrPoint(2, 2)));
+
+ var loaded = SaveAndReload(original);
+
+ Assert.True(loaded.LoadedOk);
+ Assert.Equal(original.Text, loaded.Text);
+ Assert.Equal(original.Width, loaded.Width);
+ Assert.Equal(original.Height, loaded.Height);
+ Assert.Equal(original.MarginTop, loaded.MarginTop);
+ Assert.Equal(original.Italic, loaded.Italic);
+ Assert.Equal(2, loaded.LinesForeground.Count);
+ Assert.Single(loaded.LinesBackground);
+ Assert.Equal(original.LinesForeground[0].Start.X, loaded.LinesForeground[0].Start.X);
+ Assert.Equal(original.LinesForeground[0].Start.Y, loaded.LinesForeground[0].Start.Y);
+ Assert.Equal(original.LinesForeground[0].End.X, loaded.LinesForeground[0].End.X);
+ Assert.Equal(original.LinesForeground[0].End.Y, loaded.LinesForeground[0].End.Y);
+ Assert.Equal(original.LinesBackground[0].Start.X, loaded.LinesBackground[0].Start.X);
+ Assert.Equal(original.LinesBackground[0].End.Y, loaded.LinesBackground[0].End.Y);
+ }
+
+ [Fact]
+ public void SaveLoad_MoreThan255ForegroundLines_RoundTripsCorrectly()
+ {
+ var original = new NOcrChar("B")
+ {
+ Width = 100,
+ Height = 80,
+ MarginTop = 10,
+ };
+ for (var i = 0; i < 260; i++)
+ {
+ original.LinesForeground.Add(new NOcrLine(new OcrPoint(i % 98 + 1, i % 78 + 1), new OcrPoint(i % 98 + 2, i % 78 + 2)));
+ }
+ original.LinesBackground.Add(new NOcrLine(new OcrPoint(0, 0), new OcrPoint(5, 5)));
+
+ var loaded = SaveAndReload(original);
+
+ Assert.True(loaded.LoadedOk);
+ Assert.Equal(original.Text, loaded.Text);
+ Assert.Equal(original.Width, loaded.Width);
+ Assert.Equal(original.Height, loaded.Height);
+ Assert.Equal(original.MarginTop, loaded.MarginTop);
+ Assert.Equal(260, loaded.LinesForeground.Count);
+ Assert.Single(loaded.LinesBackground);
+ Assert.Equal(original.LinesForeground[0].Start.X, loaded.LinesForeground[0].Start.X);
+ Assert.Equal(original.LinesForeground[0].Start.Y, loaded.LinesForeground[0].Start.Y);
+ Assert.Equal(original.LinesForeground[259].End.X, loaded.LinesForeground[259].End.X);
+ Assert.Equal(original.LinesForeground[259].End.Y, loaded.LinesForeground[259].End.Y);
+ Assert.Equal(original.LinesBackground[0].End.X, loaded.LinesBackground[0].End.X);
+ }
+
+ [Fact]
+ public void SaveLoad_MarginTopMoreThan255_RoundTripsCorrectly()
+ {
+ var original = new NOcrChar("C")
+ {
+ Width = 50,
+ Height = 60,
+ MarginTop = 300,
+ };
+ original.LinesForeground.Add(new NOcrLine(new OcrPoint(5, 10), new OcrPoint(45, 55)));
+ original.LinesBackground.Add(new NOcrLine(new OcrPoint(0, 0), new OcrPoint(3, 3)));
+
+ var loaded = SaveAndReload(original);
+
+ Assert.True(loaded.LoadedOk);
+ Assert.Equal(original.Text, loaded.Text);
+ Assert.Equal(original.Width, loaded.Width);
+ Assert.Equal(original.Height, loaded.Height);
+ Assert.Equal(300, loaded.MarginTop);
+ Assert.Single(loaded.LinesForeground);
+ Assert.Single(loaded.LinesBackground);
+ Assert.Equal(original.LinesForeground[0].Start.X, loaded.LinesForeground[0].Start.X);
+ Assert.Equal(original.LinesForeground[0].End.Y, loaded.LinesForeground[0].End.Y);
+ }
+
+ [Fact]
+ public void NOcrDb_SaveLoad_ViaFile_RoundTripsCorrectly()
+ {
+ var original = new NOcrChar("X")
+ {
+ Width = 15,
+ Height = 25,
+ MarginTop = 3,
+ Italic = false,
+ };
+ original.LinesForeground.Add(new NOcrLine(new OcrPoint(2, 3), new OcrPoint(12, 20)));
+ original.LinesBackground.Add(new NOcrLine(new OcrPoint(0, 0), new OcrPoint(4, 4)));
+
+ var loaded = SaveAndReload(original);
+
+ Assert.Equal("X", loaded.Text);
+ Assert.Equal(15, loaded.Width);
+ Assert.Equal(25, loaded.Height);
+ Assert.Equal(3, loaded.MarginTop);
+ Assert.False(loaded.Italic);
+ Assert.Single(loaded.LinesForeground);
+ Assert.Single(loaded.LinesBackground);
+ Assert.Equal(2, loaded.LinesForeground[0].Start.X);
+ Assert.Equal(3, loaded.LinesForeground[0].Start.Y);
+ Assert.Equal(12, loaded.LinesForeground[0].End.X);
+ Assert.Equal(20, loaded.LinesForeground[0].End.Y);
+ }
+}
diff --git a/tests/UI/UITests.csproj b/tests/UI/UITests.csproj
index ebb0716d05f..95fc1e4c26d 100644
--- a/tests/UI/UITests.csproj
+++ b/tests/UI/UITests.csproj
@@ -14,11 +14,11 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
all
runtime; build; native; contentfiles; analyzers; buildtransitive
+
diff --git a/tests/libse/LibSETests.csproj b/tests/libse/LibSETests.csproj
index 58982e607f6..5bb2f993b71 100644
--- a/tests/libse/LibSETests.csproj
+++ b/tests/libse/LibSETests.csproj
@@ -78,11 +78,11 @@
-
all
runtime; build; native; contentfiles; analyzers; buildtransitive
+