Merge branch 'SubtitleEdit:main' into main

This commit is contained in:
May Kittens Devour Your Soul 2024-03-04 10:16:40 +01:00 committed by GitHub
commit 0a73ee6147
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 416 additions and 199 deletions

View File

@ -14,7 +14,10 @@
* Update Finnish translation - thx Teijo S
* Update Chinese translation - thx nkh0472
* Update French translation - thx Pierre
* Update Italian language - thx bovirus
* Update Russian translation - thx elfriob
* Update Polish translation - thx admas
* Update Dutch translation - thx Flitskikker
* Improve auto-translate re-split (two lines only)
* Some "Beautify time codes" improvements - thx Flitskikker
* Set file name after .MKS file import - thx RedSoxFan04
@ -25,6 +28,8 @@
* Update Danish OCR dictionaries - thx Claus
* Add default icon for layout - thx PaulVeld
* Improve Macedonian language auto detect - thx Aco
* Auto load video when switching to layout w video - thx Dave
* Update Libre translate languages - thx thehijacker
* FIXED:
* Fix Papago translate - thx banziseo
* Fix for "outputfilename" in cmd line with SUP source - thx sapphire-bt
@ -37,7 +42,9 @@
* Fix for MyMemory translate to Russian/Hebrew - thx darnn
* Fix json text decode bug - thx darnn
* Fix for LRC time code bug - thx fineless71
* Fix possible crash in mkv/ts reading - thx Maknol
* Fix possible crash in MKV/TS reading - thx Maknol
* Fix for "Add missing periods" and ASSA tags - thx Firegloom
* Fix Whisper CPP Hebrew language code - thx Udo
4.0.3 (23rd December 2023)

View File

@ -8,6 +8,7 @@ using Nikse.SubtitleEdit.Logic;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace Test.FixCommonErrors
{
@ -3532,5 +3533,55 @@ namespace Test.FixCommonErrors
Assert.AreEqual("<i>It is I this illustrious illiteration. It's this...</i>", _subtitle.Paragraphs[0].Text);
}
}
[TestMethod]
public void FixMissingOpenBracketOneTest()
{
var engine = new FixMissingOpenBracket();
var sub = GetGenericSub();
sub.Paragraphs.First().Text = "Hey, FOO).";
engine.Fix(sub, new EmptyFixCallback());
Assert.AreEqual("(Hey, FOO).", sub.Paragraphs.First().Text);
}
[TestMethod]
public void FixMissingOpenBracketTwoTest()
{
var engine = new FixMissingOpenBracket();
var sub = GetGenericSub();
sub.Paragraphs.First().Text = "Reaper, hostiles, 100 meters\neast. Two hundred meters south).";
engine.Fix(sub, new EmptyFixCallback());
Assert.AreEqual("(Reaper, hostiles, 100 meters\neast. Two hundred meters south).", sub.Paragraphs.First().Text);
}
[TestMethod]
public void FixMissingOpenBracketThreeTest()
{
var engine = new FixMissingOpenBracket();
var sub = GetGenericSub();
sub.Paragraphs.First().Text = "- Foobar bar zzz).\n- Foo bar Zz";
engine.Fix(sub, new EmptyFixCallback());
Assert.AreEqual( "- (Foobar bar zzz).\n- Foo bar Zz", sub.Paragraphs.First().Text);
}
[TestMethod]
public void FixMissingOpenBracketFourTest()
{
var engine = new FixMissingOpenBracket();
var sub = GetGenericSub();
sub.Paragraphs.First().Text = "Foobar THIS IS A NOISE)";
engine.Fix(sub, new EmptyFixCallback());
Assert.AreEqual( "Foobar (THIS IS A NOISE)", sub.Paragraphs.First().Text);
}
private static Subtitle GetGenericSub()
{
return new Subtitle()
{
Paragraphs =
{
new Paragraph("Hello World!", 1000, 2000)
}
};
}
}
}

View File

@ -64,8 +64,7 @@ namespace Nikse.SubtitleEdit.Core.AudioToText
new WhisperLanguage("vi", "vietnamese"),
};
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp ||
Configuration.Settings.Tools.WhisperChoice == WhisperChoice.ConstMe)
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.ConstMe)
{
languages.Add(new WhisperLanguage("iw", "hebrew"));
}

View File

@ -81,36 +81,52 @@ namespace Nikse.SubtitleEdit.Core.AutoTranslate
{
var languageCodes = new List<string>
{
"sq",
"ar",
"az",
"bn",
"bg",
"ca",
"zh",
"zt",
"cs",
"da",
"de",
"el",
"nl",
"en",
"eo",
"es",
"fa",
"et",
"fi",
"fr",
"ga",
"de",
"el",
"he",
"hi",
"hu",
"id",
"ga",
"it",
"ja",
"ko",
"nl",
"lv",
"lt",
"ms",
"nb",
"fa",
"pl",
"pt",
"ro",
"ru",
"ru",
"sr",
"sk",
"sl",
"es",
"sv",
"tl",
"th",
"tr",
"ur",
"uk",
"zh",
"vi",
};
var result = new List<TranslationPair>();

View File

@ -177,6 +177,7 @@ namespace Nikse.SubtitleEdit.Core.Common
public string ChatGptApiKey { get; set; }
public int ChatGptDelaySeconds { get; set; }
public string GeminiProApiKey { get; set; }
public bool DisableVidoInfoViaLabel { get; set; }
public bool ListViewSyntaxColorDurationSmall { get; set; }
public bool ListViewSyntaxColorDurationBig { get; set; }
public bool ListViewSyntaxColorOverlap { get; set; }
@ -5343,6 +5344,12 @@ $HorzAlign = Center
settings.Tools.TranslateViaCopyPasteAutoCopyToClipboard = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture);
}
subNode = node.SelectSingleNode("DisableVidoInfoViaLabel");
if (subNode != null)
{
settings.Tools.DisableVidoInfoViaLabel = Convert.ToBoolean(subNode.InnerText, CultureInfo.InvariantCulture);
}
subNode = node.SelectSingleNode("ListViewSyntaxColorDurationSmall");
if (subNode != null)
{
@ -11789,6 +11796,7 @@ $HorzAlign = Center
textWriter.WriteElementString("ChatGptApiKey", settings.Tools.ChatGptApiKey);
textWriter.WriteElementString("ChatGptDelaySeconds", settings.Tools.ChatGptDelaySeconds.ToString(CultureInfo.InvariantCulture));
textWriter.WriteElementString("GeminiProApiKey", settings.Tools.GeminiProApiKey);
textWriter.WriteElementString("DisableVidoInfoViaLabel", settings.Tools.DisableVidoInfoViaLabel.ToString(CultureInfo.InvariantCulture));
textWriter.WriteElementString("ListViewSyntaxColorDurationSmall", settings.Tools.ListViewSyntaxColorDurationSmall.ToString(CultureInfo.InvariantCulture));
textWriter.WriteElementString("ListViewSyntaxColorDurationBig", settings.Tools.ListViewSyntaxColorDurationBig.ToString(CultureInfo.InvariantCulture));
textWriter.WriteElementString("ListViewSyntaxColorLongLines", settings.Tools.ListViewSyntaxColorLongLines.ToString(CultureInfo.InvariantCulture));

View File

@ -243,14 +243,20 @@ namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors
return text;
}
if (Utilities.CountTagInText(text, "\"") == 1 && Utilities.CountTagInText(text, "”") == 1)
const string doubleQuote = "\"";
if (Utilities.CountTagInText(text, doubleQuote) == 1)
{
return text.Replace("”", "\"");
}
if (Utilities.CountTagInText(text, "\"") == 1 && Utilities.CountTagInText(text, "“") == 1)
{
return text.Replace("“", "\"");
if (Utilities.CountTagInText(text, "”") == 1)
{
return text.Replace("”", doubleQuote);
}
if (Utilities.CountTagInText(text, "“") == 1)
{
return text.Replace("“", doubleQuote);
}
}
return text;
}
}

View File

@ -35,8 +35,12 @@ namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors
text = text.TrimEnd();
text = text.Replace("... " + Environment.NewLine, "..." + Environment.NewLine);
text = text.Replace("... </", "...</"); // </i>, </font>...
text = text.Replace("... ?", "...?");
text = text.Replace("... !", "...!");
if (callbacks.Language != "fr")
{
text = text.Replace("... ?", "...?");
text = text.Replace("... !", "...!");
}
if (text.IndexOf(Environment.NewLine, StringComparison.Ordinal) > 1)
{

View File

@ -1,6 +1,7 @@
using Nikse.SubtitleEdit.Core.Common;
using Nikse.SubtitleEdit.Core.Interfaces;
using System;
using System.Linq;
namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors
{
@ -11,96 +12,131 @@ namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors
public static string FixMissingOpenBracket { get; set; } = "Fix missing [ or ( in line";
}
private static string Fix(string text, string openB)
{
string pre = string.Empty;
string closeB = openB == "(" ? ")" : "]";
private static bool IsIgnorable(char ch) => char.IsWhiteSpace(ch) || ch == '-';
if (text.Contains(" " + closeB))
private static char GetOpeningPair(char tag) => tag == ')' ? '(' : '[';
private static int CalcInsertPositionFromBeginning(string input)
{
var len = input.Length;
var i = 0;
// skip asa tag
while (i < len && input[i] == '{')
{
openB = openB + " ";
i = input.IndexOf('}', i + 1) + 1;
if (i == 0) break;
}
do
{
if (text.Length > 1 && text.StartsWith('-'))
{
pre += "- ";
if (text[1] == ' ')
{
text = text.Substring(2);
}
else
{
text = text.Substring(1);
}
}
if (text.Length > 3 && text.StartsWith("<i>", StringComparison.OrdinalIgnoreCase))
{
pre += "<i>";
if (text[3] == ' ')
{
text = text.Substring(4);
}
else
{
text = text.Substring(3);
}
}
if (text.Length > 1 && (text[0] == ' ' || text[0] == '.'))
{
pre += text[0] == '.' ? '.' : ' ';
text = text.Substring(1);
while (text.Length > 0 && text[0] == '.')
{
pre += ".";
text = text.Substring(1);
}
text = text.TrimStart(' ');
}
} while (text.StartsWith("<i>", StringComparison.Ordinal) || text.StartsWith('-'));
while (i < len && IsIgnorable(input[i])) i++;
text = pre + openB + text;
return text;
// skip html tags
while (i < len && input[i] == '<')
{
i = input.IndexOf('>', i + 1) + 1;
if (i == 0) break;
}
// skip anything that is not a letter or digit
while (i < len && !char.IsLetterOrDigit(input[i])) i++;
return i;
}
private static string RestoreMissingOpenParenthesis(string input)
{
var len = input.Length;
// empty string
if (len == 0) return input;
var closeTags = new[] { ']', ')' };
// ignore line if contains opening
if (input.Any(ch => ch == '(' || ch == '[')) return input;
var ci = input.IndexOfAny(closeTags);
// invalid position
if (ci < 1) return input;
var k = ci - 1;
// jump backward if uppercase or any one of the ignorable chars
while (k > 0 && char.IsUpper(input[k]) || IsIgnorable(input[k])) k--;
// note if we have case like: "Hey, FOO)." then we want to insert the open before the "Hey"
if (k > 0 && input[k] == ',')
{
k--;
while (k > 0 && char.IsLetterOrDigit(input[k])) k--;
}
// try landing on white-space char
if (k >= 0 && k + 1 < len && input[k] != ' ' && input[k + 1] == ' ') k++;
// try finding first valid char (this is used to not insert '(' or '[') in to left of a white-space
while (k < ci && char.IsWhiteSpace(input[k])) k++;
// FO) => (FO)
if (ci - k > 1)
{
input = input.Insert(k, GetOpeningPair(input[ci]).ToString());
}
else
{
// recalculate value of k from beginning
k = CalcInsertPositionFromBeginning(input);
if (k < ci)
{
input = input.Insert(k, GetOpeningPair(input[ci]).ToString());
}
}
return input;
}
private static bool IsPerLineRestoration(string[] lines) => lines.Length == 1 || lines.All(l => l.HasSentenceEnding());
public void Fix(Subtitle subtitle, IFixCallbacks callbacks)
{
string fixAction = Language.FixMissingOpenBracket;
int fixCount = 0;
for (int i = 0; i < subtitle.Paragraphs.Count; i++)
var fixAction = Language.FixMissingOpenBracket;
var fixCount = 0;
for (var i = 0; i < subtitle.Paragraphs.Count; i++)
{
var p = subtitle.Paragraphs[i];
if (callbacks.AllowFix(p, fixAction))
{
var hit = false;
string oldText = p.Text;
var openIdx = p.Text.IndexOf('(');
var closeIdx = p.Text.IndexOf(')');
if (closeIdx >= 0 && (closeIdx < openIdx || openIdx < 0))
var oldText = p.Text;
var text = p.Text;
// split only if both lines are closed
var lines = p.Text.SplitToLines().ToArray();
// logic to perform for when line is/are closed.
if (IsPerLineRestoration(lines))
{
p.Text = Fix(p.Text, "(");
hit = true;
var count = lines.Length;
for (var j = 0; j < count; j++)
{
lines[j] = RestoreMissingOpenParenthesis(lines[j]);
}
// rebuild the text
text = count > 1 ? string.Join(Environment.NewLine, lines) : lines[0];
}
else
{
// handles 2+ lines even if the their adjacent is not closed
text = RestoreMissingOpenParenthesis(text);
}
openIdx = p.Text.IndexOf('[');
closeIdx = p.Text.IndexOf(']');
if (closeIdx >= 0 && (closeIdx < openIdx || openIdx < 0))
{
p.Text = Fix(p.Text, "[");
hit = true;
}
if (hit)
if (oldText.Length != text.Length)
{
fixCount++;
p.Text = text;
callbacks.AddFixToListView(p, fixAction, oldText, p.Text);
}
}
}
callbacks.UpdateFixStatus(fixCount, Language.FixMissingOpenBracket);
}
}
}
}

View File

@ -1,7 +1,7 @@
using Nikse.SubtitleEdit.Core.Common;
using Nikse.SubtitleEdit.Core.Interfaces;
using System;
using System;
using System.Globalization;
using Nikse.SubtitleEdit.Core.Common;
using Nikse.SubtitleEdit.Core.Interfaces;
namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors
{
@ -12,105 +12,120 @@ namespace Nikse.SubtitleEdit.Core.Forms.FixCommonErrors
public static string StartWithUppercaseLetterAfterColon { get; set; } = "Start with uppercase letter after colon/semicolon";
}
private static readonly char[] ExpectedChars = { ':', ';' };
public void Fix(Subtitle subtitle, IFixCallbacks callbacks)
{
string fixAction = Language.StartWithUppercaseLetterAfterColon;
int noOfFixes = 0;
for (int i = 0; i < subtitle.Paragraphs.Count; i++)
var fixAction = Language.StartWithUppercaseLetterAfterColon;
var noOfFixes = 0;
var count = subtitle.Paragraphs.Count;
var isTurkish = IsTurkish(callbacks.Language);
// paragraph
for (var i = 0; i < count; i++)
{
var p = new Paragraph(subtitle.Paragraphs[i]);
Paragraph last = subtitle.GetParagraphOrDefault(i - 1);
string oldText = p.Text;
int skipCount = 0;
if (last != null)
var p = subtitle.Paragraphs[i];
if (!callbacks.AllowFix(p, fixAction))
{
string lastText = HtmlUtil.RemoveHtmlTags(last.Text);
if (lastText.EndsWith(':') || lastText.EndsWith(';'))
{
var st = new StrippableText(p.Text);
if (st.StrippedText.Length > 0 && st.StrippedText[0] != char.ToUpper(st.StrippedText[0]))
{
p.Text = st.Pre + char.ToUpper(st.StrippedText[0]) + st.StrippedText.Substring(1) + st.Post;
}
}
continue;
}
if (oldText.Contains(ExpectedChars))
var text = p.Text;
var len = text.Length;
// text
for (var j = 0; j < len; j++)
{
bool lastWasColon = false;
for (int j = 0; j < p.Text.Length; j++)
var ch = text[j];
if (ch == ':' || ch == ';')
{
var s = p.Text[j];
if (s == ':' || s == ';')
var k = j + 1;
// skip white space before formatting
while (k < len && text[k] == ' ') k++;
// skip formatting e.g: <i>, <b>,<font..>...
while (k < len && text[k] == '<' || text[k] == '{')
{
lastWasColon = true;
var closingPair = GetClosingPair(text[k]);
var closeIdx = text.IndexOf(closingPair, k + 1);
if (closeIdx < 0)
{
k++;
break;
}
k = closeIdx + 1;
}
else if (lastWasColon)
// skip whitespace after formatting
while (k < len && text[k] == ' ') k++;
if (k < len)
{
// skip whitespace index
if (j + 2 < p.Text.Length && p.Text[j] == ' ')
// slice from k index
var textFromK = text.Substring(k);
if (CanCapitalize(textFromK, callbacks) && !isTurkish)
{
s = p.Text[++j];
text = text.Substring(0, k) + textFromK.CapitalizeFirstLetter();
}
var startFromJ = p.Text.Substring(j);
if (startFromJ.Length > 3 && startFromJ[0] == '<' && startFromJ[2] == '>' && (startFromJ[1] == 'i' || startFromJ[1] == 'b' || startFromJ[1] == 'u'))
else if (Helper.IsTurkishLittleI(text[k], callbacks.Encoding, callbacks.Language))
{
skipCount = 2;
}
else if (startFromJ.StartsWith("<font ", StringComparison.OrdinalIgnoreCase) && p.Text.Substring(j).Contains('>'))
{
skipCount = (j + startFromJ.IndexOf('>', 6)) - j;
}
else if (Helper.IsTurkishLittleI(s, callbacks.Encoding, callbacks.Language))
{
p.Text = p.Text.Remove(j, 1).Insert(j, Helper.GetTurkishUppercaseLetter(s, callbacks.Encoding).ToString(CultureInfo.InvariantCulture));
lastWasColon = false;
}
else if (char.IsLower(s))
{
// iPhone
bool change = true;
if (s == 'i' && p.Text.Length > j + 1)
{
if (p.Text[j + 1] == char.ToUpper(p.Text[j + 1]))
{
change = false;
}
}
if (change)
{
p.Text = p.Text.Remove(j, 1).Insert(j, char.ToUpper(s).ToString(CultureInfo.InvariantCulture));
}
lastWasColon = false;
}
else if (!(" " + Environment.NewLine).Contains(s))
{
lastWasColon = false;
}
// move the: 'j' pointer and reset skipCount to 0
if (skipCount > 0)
{
j += skipCount;
skipCount = 0;
text = text.Remove(j, 1).Insert(j, Helper.GetTurkishUppercaseLetter(text[k], callbacks.Encoding).ToString(CultureInfo.InvariantCulture));
}
}
}
}
if (oldText != p.Text && callbacks.AllowFix(p, fixAction))
if (text != p.Text)
{
noOfFixes++;
subtitle.Paragraphs[i].Text = p.Text;
var oldText = subtitle.Paragraphs[i].Text;
subtitle.Paragraphs[i].Text = text;
callbacks.AddFixToListView(subtitle.Paragraphs[i], fixAction, oldText, p.Text);
}
}
callbacks.UpdateFixStatus(noOfFixes, Language.StartWithUppercaseLetterAfterColon);
char GetClosingPair(char ch) => ch == '<' ? '>' : '}';
}
private static bool IsTurkish(string lang) => lang.Equals("tr", StringComparison.OrdinalIgnoreCase);
private static bool CanCapitalize(string input, IFixCallbacks callbacks)
{
return !IsAppleNaming(input) && BeginsWithLetter(input);
}
/// <summary>
/// Returns true if first character is convertible to uppercase otherwise false
/// </summary>
private static bool BeginsWithLetter(string input)
{
if (input.Length == 0)
{
return false;
}
var ch = input[0];
return char.IsLetter(ch) && char.IsLower(ch);
}
/// <summary>
/// Check if word is one of the apple product name e.g; iPhone, iPad, iMac...
/// </summary>
private static bool IsAppleNaming(string input)
{
if (string.IsNullOrEmpty(input))
{
return false;
}
var len = input.Length;
if (len < 3)
{
return false;
}
return input[0] == 'i' && char.IsUpper(input[1]) && char.IsLower(input[2]);
}
}
}
}

View File

@ -267,6 +267,21 @@ namespace Nikse.SubtitleEdit.Controls
KeyDown?.Invoke(sender, e);
Invalidate();
}
else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.A)
{
_textBox.SelectAll();
e.SuppressKeyPress = true;
}
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.C)
{
_textBox.Copy();
e.SuppressKeyPress = true;
}
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.V)
{
_textBox.Paste();
e.SuppressKeyPress = true;
}
else
{
KeyDown?.Invoke(sender, e);

View File

@ -36487,7 +36487,7 @@ namespace Nikse.SubtitleEdit.Forms
private void labelVideoInfo_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(_videoFileName) || _videoInfo == null)
if (string.IsNullOrEmpty(_videoFileName) || _videoInfo == null || Configuration.Settings.Tools.DisableVidoInfoViaLabel)
{
return;
}

View File

@ -3,7 +3,7 @@
<General>
<Title>Subtitle Edit</Title>
<Version>4.0.3</Version>
<TranslatedBy>Tradotto da NAMP e bovirus - Data traduzione: 20.02.2024</TranslatedBy>
<TranslatedBy>Tradotto da NAMP e bovirus - Data traduzione: 22.02.2024</TranslatedBy>
<CultureName>it-IT</CultureName>
<HelpFile />
<Ok>OK</Ok>
@ -965,7 +965,7 @@ Si sfrutta così il ritmo intrinseco dell'immagine.</CreateSimpleChainingToolTip
<FixDoubleDash>Correggi '--' -&gt; '...'</FixDoubleDash>
<FixDoubleGreaterThan>Elimina &gt;&gt;</FixDoubleGreaterThan>
<FixEllipsesStart>Elimina puntini iniziali '...'</FixEllipsesStart>
<FixMissingOpenBracket>Correggi [ mancante nella riga</FixMissingOpenBracket>
<FixMissingOpenBracket>Correggi [ o ( mancante nella riga</FixMissingOpenBracket>
<FixMusicNotation>Sostituisci simboli musicali (esempio âTª) con simboli preferiti</FixMusicNotation>
<FixDoubleDashExample>'Oh sì!' -&gt; 'Wow... oh sì!'</FixDoubleDashExample>
<FixDoubleGreaterThanExample>'&gt;&gt; Roberto: La zuppa è pronta!' -&gt; 'Roberto: La zuppa è pronta!'</FixDoubleGreaterThanExample>

View File

@ -10,10 +10,11 @@
<Cancel>&amp;Anuluj</Cancel>
<Yes>Tak</Yes>
<No>Nie</No>
<Close>Zamknij</Close>
<Apply>Zastosuj</Apply>
<ApplyTo>Zastosuj do</ApplyTo>
<None>Brak</None>
<All>Wszystko</All>
<All>Wszystkie</All>
<Preview>Podgląd</Preview>
<ShowPreview>Pokaż podgląd</ShowPreview>
<HidePreview>Ukryj podgląd</HidePreview>
@ -404,6 +405,11 @@ Kliknij "{0}", aby najpierw wyodrębnić lub zaimportować zmiany ujęć, albo w
<BatchAlignTimeCodes>Dopasuj kody czasowe do kodów czasowych klatki</BatchAlignTimeCodes>
<BatchUseExactTimeCodes>Użyj dokładnych kodów czasowych (jeśli są dostępne)</BatchUseExactTimeCodes>
<BatchSnapToShotChanges>Przyciągaj wskaźniki do zmian ujęcia (jeśli są dostępne)</BatchSnapToShotChanges>
<UnfixableParagraphsTitle>Przegląd nie w pełni połączonych napisów</UnfixableParagraphsTitle>
<UnfixableParagraphsInstructions>Niektóre napisy nie zostały w pełni połączone zgodnie z profilem użytkownika, najprawdopodobniej z powodu zbyt ciasno zgrupowanych zmian ujęć (możliwe fałszywe alarmy). Możesz przejrzeć te przypadki ręcznie, aby upewnić się, że wskazówki są przyciągane do prawidłowych (rzeczywistych) zmian ujęcia.</UnfixableParagraphsInstructions>
<UnfixableParagraphsColumnParagraphs>Linie</UnfixableParagraphsColumnParagraphs>
<UnfixableParagraphsColumnParagraphsFormat>#{0} #{1}</UnfixableParagraphsColumnParagraphsFormat>
<UnfixableParagraphsColumnGap>Odstęp (klatki)</UnfixableParagraphsColumnGap>
</BeautifyTimeCodes>
<BeautifyTimeCodesProfile>
<Title>Edycja profilu</Title>
@ -427,6 +433,7 @@ Kliknij "{0}", aby najpierw wyodrębnić lub zaimportować zmiany ujęć, albo w
<Chaining>Łączenie</Chaining>
<InCueOnShot>Wskaźnik wejściowy zmiany ujęcia</InCueOnShot>
<OutCueOnShot>Wskaźnik wyjściowy zmiany ujęcia</OutCueOnShot>
<CheckGeneral>Nadal egzekwuj zasady ogólne, jeśli nie ma to na nie wpływu</CheckGeneral>
<MaxGap>Maksymalny odstęp:</MaxGap>
<ShotChangeBehavior>Jeśli w międzyczasie nastąpi zmiana ujęcia:</ShotChangeBehavior>
<DontChain>Nie łącz</DontChain>
@ -956,7 +963,7 @@ Wykorzystujemy naturalny rytm obrazu.</CreateSimpleChainingToolTip>
<FixDoubleDash>Popraw '--' na wielokropek '...'</FixDoubleDash>
<FixDoubleGreaterThan>Usuń '&gt;&gt;'</FixDoubleGreaterThan>
<FixEllipsesStart>Usuń wiodący wielokropek '...'</FixEllipsesStart>
<FixMissingOpenBracket>Popraw brakujący '[' w linii</FixMissingOpenBracket>
<FixMissingOpenBracket>Popraw brakujący '[' lub '(' w linii</FixMissingOpenBracket>
<FixMusicNotation>Zastąp symbole muzyczne (np. âTª) preferowanym symbolem</FixMusicNotation>
<FixDoubleDashExample>'Ach-- tak!' -&gt; 'Ach... tak!'</FixDoubleDashExample>
<FixDoubleGreaterThanExample>'&gt;&gt; Robert: Siema, stary!' -&gt; 'Robert: Siema, stary!'</FixDoubleGreaterThanExample>
@ -1051,9 +1058,9 @@ Wykorzystujemy naturalny rytm obrazu.</CreateSimpleChainingToolTip>
<PoweredByX>Obsługiwane przez {0}</PoweredByX>
<MsClientSecretNeeded>Przepraszamy, potrzebujesz klucza do usług poznawczych "Translator Text" firmy Microsoft, aby móc korzystać z najnowszego programu Microsoft Translator.
Przejdź do "Opcje -&gt; Ustawienia -&gt; Narzędzia", aby wpisać swój klucz.</MsClientSecretNeeded>
Przejdź do "Opcje -&gt; Ustawienia -&gt; Tłumaczenie automatyczne", aby wpisać swój klucz.</MsClientSecretNeeded>
<GoogleNoApiKeyWarning>Spróbuję przetłumaczyć bez klucza API... (powolne i z ograniczonymi danymi).
Aby użyć klucza API przejdź do "Opcje -&gt; Ustawienia -&gt; Narzędzia", aby wprowadzić swój klucz API tłumacza Google.</GoogleNoApiKeyWarning>
Aby użyć klucza API przejdź do "Opcje -&gt; Ustawienia -&gt; Tłumaczenie automatyczne", aby wprowadzić swój klucz API tłumacza Google.</GoogleNoApiKeyWarning>
<Service>Usługa:</Service>
<LineMergeHandling>Połącz linie:</LineMergeHandling>
<ProcessorMergeNext>Połącz maksymalnie dwie linie</ProcessorMergeNext>
@ -1319,6 +1326,7 @@ Aby użyć klucza API przejdź do "Opcje -&gt; Ustawienia -&gt; Narzędzia", aby
<CloseTranslation>Zamknij przetłumaczone napisy</CloseTranslation>
<OpenContainingFolder>Otwórz folder zawierający wideo</OpenContainingFolder>
<Compare>&amp;Porównaj...</Compare>
<VerifyCompleteness>Zweryfikuj kompletność...</VerifyCompleteness>
<Statistics>S&amp;tatystyki...</Statistics>
<Plugins>&amp;Wtyczki...</Plugins>
<ImportSubtitleFromVideoFile>Napisy z pliku wideo...</ImportSubtitleFromVideoFile>
@ -1565,6 +1573,7 @@ Aby użyć klucza API przejdź do "Opcje -&gt; Ustawienia -&gt; Narzędzia", aby
<Subscript>Indeks dolny</Subscript>
<Alignment>Wyrównanie...</Alignment>
<AutoBalanceSelectedLines>Automatycznie zrównoważ wybrane linie...</AutoBalanceSelectedLines>
<EvenlyDistributeSelectedLines>Równomierne rozmieszczenie wybranych linii (ZNS)</EvenlyDistributeSelectedLines>
<RemoveLineBreaksFromSelectedLines>Usuń łamanie linii z zaznaczonych linii...</RemoveLineBreaksFromSelectedLines>
<TypewriterEffect>Efekt maszyny do pisania...</TypewriterEffect>
<KaraokeEffect>Efekt karaoke...</KaraokeEffect>
@ -1836,6 +1845,8 @@ Kontynuować?</SubtitleAppendPrompt>
<SortedByX>Wykonano sortowanie wg: {0}</SortedByX>
<BeforeAutoBalanceSelectedLines>Przed automatycznym zrównoważeniem wybranych linii</BeforeAutoBalanceSelectedLines>
<NumberOfLinesAutoBalancedX>Liczba automatycznie zrównoważonych linii: {0}</NumberOfLinesAutoBalancedX>
<BeforeEvenlyDistributeSelectedLines>Przed równomiernym rozmieszczeniem wybranych linii</BeforeEvenlyDistributeSelectedLines>
<NumberOfLinesEvenlyDistributedX>Liczba równomiernie rozmieszczonych linii: {0}</NumberOfLinesEvenlyDistributedX>
<BeforeRemoveLineBreaksInSelectedLines>Przed usunięciem łamania linii z wybranych linii</BeforeRemoveLineBreaksInSelectedLines>
<NumberOfWithRemovedLineBreakX>Liczba linii z usuniętym łamaniem linii: {0}</NumberOfWithRemovedLineBreakX>
<BeforeMultipleReplace>Przed wielokrotnymi zastąpieniami</BeforeMultipleReplace>
@ -2609,6 +2620,7 @@ może edytować ten sam plik napisów (współpraca)</Information>
<MergeDialogWithNext>Połącz dialog z następnym (wstaw myślniki)</MergeDialogWithNext>
<MergeDialogWithPrevious>Połącz dialog z poprzednim (wstaw myślniki)</MergeDialogWithPrevious>
<AutoBalanceSelectedLines>Automatyczne równoważenie wybranych linii</AutoBalanceSelectedLines>
<EvenlyDistributeSelectedLines>Równomierne rozmieszczenie wybranych linii (ZNS)</EvenlyDistributeSelectedLines>
<GoToNext>Przejdź do następnej linii</GoToNext>
<GoToNextPlayTranslate>Przejdź do następnej linii (i odtwarzaj w "Trybie tłumacza")</GoToNextPlayTranslate>
<GoToNextCursorAtEnd>Przejdź do następnej linii i ustaw kursor na końcu</GoToNextCursorAtEnd>
@ -2708,6 +2720,7 @@ może edytować ten sam plik napisów (współpraca)</Information>
<AudioExtractSelectedLines>Wyodrębnij audio (wybrane linie)</AudioExtractSelectedLines>
<AudioToTextSelectedLinesX>Audio na tekst wybranych linii ({0})</AudioToTextSelectedLinesX>
<VideoToggleBrightness>Przełącz jasność (tylko mpv)</VideoToggleBrightness>
<AutoTranslateSelectedLines>Tłumaczenie automatyczne wybranych linii</AutoTranslateSelectedLines>
<CustomSearch1>Tłumaczenie, wyszukiwanie niestandardowe 1</CustomSearch1>
<CustomSearch2>Tłumaczenie, wyszukiwanie niestandardowe 2</CustomSearch2>
<CustomSearch3>Tłumaczenie, wyszukiwanie niestandardowe 3</CustomSearch3>
@ -2837,6 +2850,8 @@ Kontynuować?</RestoreDefaultSettingsMsg>
<ExportAsHtml>Eksportuj jako HTML...</ExportAsHtml>
<SetNewActor>Ustaw nowego aktora/głos</SetNewActor>
<SetActorX>Ustaw aktora/głos {0}</SetActorX>
<Used>Używane</Used>
<Unused>Nieużywane</Unused>
</Settings>
<SettingsMpv>
<DownloadMpv>Pobierz bibliotekę mpv</DownloadMpv>
@ -3150,6 +3165,21 @@ Kontynuować?</RestoreDefaultSettingsMsg>
<Message>Jeśli chcesz to naprawić, wyślij e-mail na adres mailto: niksedk@gmail.com i dołącz kopię napisów.</Message>
<ImportAsPlainText>Importuj jako zwykły tekst...</ImportAsPlainText>
</UnknownSubtitle>
<VerifyCompleteness>
<Title>Weryfikacja kompletności na podstawie innych napisów</Title>
<OpenControlSubtitle>Otwórz napisy kontrolne</OpenControlSubtitle>
<ControlSubtitleError>Napisy kontrolne są puste lub nie można ich wczytać.</ControlSubtitleError>
<ControlSubtitleX>Napisy kontrolne: {0}</ControlSubtitleX>
<Coverage>Pokrywanie się</Coverage>
<CoveragePercentageX>{0:0.##}%</CoveragePercentageX>
<SortByCoverage>Sortuj wg stopnia pokrywania się</SortByCoverage>
<SortByTime>Sortuj wg czasu</SortByTime>
<Reload>Zweryfikuj ponownie</Reload>
<Insert>Wstaw</Insert>
<InsertAndNext>Wstaw i idź do następnego</InsertAndNext>
<Dismiss>Odrzuć</Dismiss>
<DismissAndNext>Odrzuć i idź do następnego</DismissAndNext>
</VerifyCompleteness>
<VisualSync>
<Title>Synchronizacja wizualna</Title>
<StartScene>Scena początkowa</StartScene>

View File

@ -3,14 +3,14 @@
<General>
<Title>Subtitle Edit</Title>
<Version>4.0.3</Version>
<TranslatedBy>Перевод на русский: Leserg (mailto:leserg@ua.fm)
Последующие правки и дополнения перевода: Elheym https://discord.gg/Z7a5qtDc || (mailto:Subs.for.everybody@gmail.com)</TranslatedBy>
<TranslatedBy>Перевод на русский: Leserg | Elheym | elfriob</TranslatedBy>
<CultureName>ru-RU</CultureName>
<HelpFile />
<Ok>ОК</Ok>
<Cancel>Отмена</Cancel>
<Yes>Да</Yes>
<No>Нет</No>
<Close>Закрыть</Close>
<Apply>Применить</Apply>
<ApplyTo>Применить к</ApplyTo>
<None>Нет</None>
@ -109,8 +109,8 @@
</General>
<About>
<Title>О программе</Title>
<AboutText1>Subtitle Edit - это свободное программное обеспечение,
распространяемое на основании общественной лицензии GNU.
<AboutText1>Subtitle Edit - это бесплатное программное обеспечение,
распространяемое на условиях GNU Public License.
Вы можете свободно распространять, модифицировать и
использовать программу по своему усмотрению.
@ -154,7 +154,7 @@ https://github.com/SubtitleEdit/subtitleedit
Командная строка: {1} {2}</WaveFileNotFound>
<WaveFileMalformed>{0} не удалось извлечь форму сигнала из аудио-файла!
Командная строка: {1} {2} Примечание: Проверьте свободное место на диске</WaveFileMalformed>
Командная строка: {1} {2} Примечание: проверьте свободное место на диске</WaveFileMalformed>
<LowDiskSpace>Недостаточно свободного места на диске!</LowDiskSpace>
<FreeDiskSpace>{0} свободно</FreeDiskSpace>
<NoAudioTracksFoundGenerateEmptyWaveform>Звуковые дорожки не найдены! Создать пустую форму сигнала?</NoAudioTracksFoundGenerateEmptyWaveform>
@ -177,7 +177,7 @@ https://github.com/SubtitleEdit/subtitleedit
<Recalculate>Перерасчёта</Recalculate>
<AddSeconds>Добавить секунды</AddSeconds>
<SetAsPercent>«%» от продолжительности</SetAsPercent>
<Note>Примечание: Временные границы субтитра будут установлены
<Note>Примечание: временные границы субтитра будут установлены
без наложения на следующий текст</Note>
<Fixed>Фиксировано</Fixed>
<Milliseconds>Миллисекунд(-ы)</Milliseconds>
@ -313,7 +313,7 @@ https://github.com/SubtitleEdit/subtitleedit
<TitleUnbreak>Удалить переносы из выбранных строк</TitleUnbreak>
<LinesFoundX>Найдено строк: {0}</LinesFoundX>
<OnlyBreakLinesLongerThan>Разделять только строки длиннее, чем</OnlyBreakLinesLongerThan>
<OnlyUnbreakLinesLongerThan>Только для строк длиннее чем</OnlyUnbreakLinesLongerThan>
<OnlyUnbreakLinesLongerThan>Только для строк длиннее, чем</OnlyUnbreakLinesLongerThan>
</AutoBreakUnbreakLines>
<BatchConvert>
<Title>Пакетная конвертация</Title>
@ -407,6 +407,13 @@ https://github.com/SubtitleEdit/subtitleedit
<BatchAlignTimeCodes>Согласование тайм-кодов с тайм-кодами кадров</BatchAlignTimeCodes>
<BatchUseExactTimeCodes>Использовать точные тайм-коды (если доступно)</BatchUseExactTimeCodes>
<BatchSnapToShotChanges>Привязка метки к смене плана (если доступно)</BatchSnapToShotChanges>
<UnfixableParagraphsTitle>Просмотреть не полностью связанные субтитры</UnfixableParagraphsTitle>
<UnfixableParagraphsInstructions>Некоторые субтитры не полностью связаны в соответствии с вашим профилем из-за скорости изменения кадров (ложных срабатываний).
Такие случаи вы можете просмотреть вручную, чтобы убедиться, что реплики привязаны к правильным (реальным) изменениям кадра.</UnfixableParagraphsInstructions>
<UnfixableParagraphsColumnParagraphs>Строки</UnfixableParagraphsColumnParagraphs>
<UnfixableParagraphsColumnParagraphsFormat>#{0} #{1}</UnfixableParagraphsColumnParagraphsFormat>
<UnfixableParagraphsColumnGap>Разрыв (кадры)</UnfixableParagraphsColumnGap>
</BeautifyTimeCodes>
<BeautifyTimeCodesProfile>
<Title>Редактировать профиль</Title>
@ -430,6 +437,7 @@ https://github.com/SubtitleEdit/subtitleedit
<Chaining>Связывание</Chaining>
<InCueOnShot>Нач. метка изм-ния плана</InCueOnShot>
<OutCueOnShot>Кон. метка изм-ния плана</OutCueOnShot>
<CheckGeneral>Применять общие правила, если они не затрагиваются</CheckGeneral>
<MaxGap>Макс. интервал:</MaxGap>
<ShotChangeBehavior>Если происходит изменение плана:</ShotChangeBehavior>
<DontChain>Не связывать</DontChain>
@ -439,8 +447,8 @@ https://github.com/SubtitleEdit/subtitleedit
Хотите продолжить?</ResetWarning>
<CreateSimpleTitle>Создание упрощённого режима</CreateSimpleTitle>
<CreateSimpleInstruction>Введите основные правила и текущий профиль будут обновлен.</CreateSimpleInstruction>
<CreateSimpleGapInstruction>Минимальный интервал между субтитрами.</CreateSimpleGapInstruction>
<CreateSimpleInstruction>Введите основные правила и текущий профиль будет обновлен</CreateSimpleInstruction>
<CreateSimpleGapInstruction>Минимальный интервал между субтитрами</CreateSimpleGapInstruction>
<CreateSimpleInCues>Начальные метки:</CreateSimpleInCues>
<CreateSimpleInCues0Frames>При смене кадра</CreateSimpleInCues0Frames>
<CreateSimpleInCues1Frames>1 кадр после смены плана</CreateSimpleInCues1Frames>
@ -454,11 +462,11 @@ https://github.com/SubtitleEdit/subtitleedit
<CreateSimpleOutCuesGap>Минимальный интервал перед сменой плана</CreateSimpleOutCuesGap>
<CreateSimpleSnapClosestCue>Для связанных субтитров выровняйте начальную или конечную метку по смене плана, в зависимости от того, какая из них ближе</CreateSimpleSnapClosestCue>
<CreateSimpleMaxOffset>Макс. сдвиг:</CreateSimpleMaxOffset>
<CreateSimpleMaxOffsetInstruction>Сигналы на этом расстоянии от смены кадров будут привязаны к смене кадров.</CreateSimpleMaxOffsetInstruction>
<CreateSimpleMaxOffsetInstruction>Сигналы на этом расстоянии от смены кадров будут привязаны к смене кадров</CreateSimpleMaxOffsetInstruction>
<CreateSimpleSafeZone>Безопасная зона:</CreateSimpleSafeZone>
<CreateSimpleSafeZoneInstruction>Метки, расположенные на этом расстоянии от изменения плана, будут привязаны к изменению плана.</CreateSimpleSafeZoneInstruction>
<CreateSimpleSafeZoneInstruction>Метки, расположенные на этом расстоянии от изменения плана, будут привязаны к изменению плана</CreateSimpleSafeZoneInstruction>
<CreateSimpleChainingGap>Макс. интервал связывания:</CreateSimpleChainingGap>
<CreateSimpleChainingGapInstruction>Если интервал между двумя субтитрами меньше этого значения, субтитры будут объединены.</CreateSimpleChainingGapInstruction>
<CreateSimpleChainingGapInstruction>Если интервал между двумя субтитрами меньше этого значения, субтитры будут объединены</CreateSimpleChainingGapInstruction>
<CreateSimpleChainingGapAfterShotChanges>После конечной метки при смене плана, интервал может быть короче</CreateSimpleChainingGapAfterShotChanges>
<CreateSimpleChainingToolTip>Рекомендуется связывать субтитры, чтобы согласовать «ритм» с «миганием» субтитров.
Это обеспечивает более комфортные условия просмотра.
@ -466,7 +474,7 @@ https://github.com/SubtitleEdit/subtitleedit
После связывания субтитры либо подключаются (т.е. субтитры исчезают, а новые субтитры появляются сразу после небольшой паузы), либо нет.
Это даёт зрителям некоторое представление о том, когда они могут снова переключить своё внимание на экран.
После того, как субтитры исчезнут при смене плана, интервал связывания может быть немного короче, поскольку смены плана «сбрасывают» изображение.
После того как субтитры исчезнут при смене плана, интервал связывания может быть немного короче, поскольку смены плана «сбрасывают» изображение.
Мы используем естественный ритм изображения.</CreateSimpleChainingToolTip>
<CreateSimpleLoadNetflixRules>Загрузить правила Netflix</CreateSimpleLoadNetflixRules>
<Frames>кадры(-ов)</Frames>
@ -960,7 +968,7 @@ https://github.com/SubtitleEdit/subtitleedit
<FixDoubleDash>Исправить символы тире «--» на многоточие «...»</FixDoubleDash>
<FixDoubleGreaterThan>Удалить символы «&gt;&gt;» в начале строки</FixDoubleGreaterThan>
<FixEllipsesStart>Удалить многоточие «...» в начале строки</FixEllipsesStart>
<FixMissingOpenBracket>Добавить недостающие «[» в строке</FixMissingOpenBracket>
<FixMissingOpenBracket>Добавить недостающие [ или ( в строке</FixMissingOpenBracket>
<FixMusicNotation>Заменить музыкальные символы (напр. âTª) выбранным</FixMusicNotation>
<FixDoubleDashExample>'Хм-- да!' -&gt; 'Хм... да!'</FixDoubleDashExample>
<FixDoubleGreaterThanExample>'&gt;&gt; Иван: Спасибо!' -&gt; 'Иван: Спасибо!'</FixDoubleGreaterThanExample>
@ -1053,9 +1061,9 @@ https://github.com/SubtitleEdit/subtitleedit
<PoweredByGoogleTranslate>Переводчик Google</PoweredByGoogleTranslate>
<PoweredByMicrosoftTranslate>Переводчик Microsoft</PoweredByMicrosoftTranslate>
<PoweredByX>Переводчик {0}</PoweredByX>
<MsClientSecretNeeded>Извините, вам нужен секретный ключ клиента Bing от Microsoft, чтобы использовать последнюю версию Bing Translate.
<MsClientSecretNeeded>К сожалению, для использования последней версии Microsoft Translator вам понадобится ключ «Translator Text» Cognitive Services от Microsoft.
Перейдите в «Параметры -&gt; Настройки -&gt; Инструменты», чтобы ввести свой секретный ключ клиенту Bing</MsClientSecretNeeded>
Чтобы ввести ключ, перейдите в «Параметры -&gt; Настройки -&gt; Автоматический перевод», чтобы ввести ключ.</MsClientSecretNeeded>
<GoogleNoApiKeyWarning>Попытка перевести без ключа API… (медленно и с ограничением данных)</GoogleNoApiKeyWarning>
<Service>Сервис:</Service>
<LineMergeHandling>Слияние строк:</LineMergeHandling>
@ -1325,6 +1333,7 @@ https://github.com/SubtitleEdit/subtitleedit
<CloseTranslation>Закрыть переведённые субтитры</CloseTranslation>
<OpenContainingFolder>Открыть папку с субтитрами</OpenContainingFolder>
<Compare>Сравнить…</Compare>
<VerifyCompleteness>Проверка полноты…</VerifyCompleteness>
<Statistics>Статистика…</Statistics>
<Plugins>Плагины…</Plugins>
<ImportSubtitleFromVideoFile>Видеофайла…</ImportSubtitleFromVideoFile>
@ -1571,6 +1580,7 @@ https://github.com/SubtitleEdit/subtitleedit
<Subscript>Нижний индекс</Subscript>
<Alignment>Выравнивание…</Alignment>
<AutoBalanceSelectedLines>Автовыравнивание выбранных строк…</AutoBalanceSelectedLines>
<EvenlyDistributeSelectedLines>Равномерно распределить выбранные строки (CPS)</EvenlyDistributeSelectedLines>
<RemoveLineBreaksFromSelectedLines>Удалить все переносы из выбранных строк…</RemoveLineBreaksFromSelectedLines>
<TypewriterEffect>Эффект машинописи…</TypewriterEffect>
<KaraokeEffect>Эффект караоке…</KaraokeEffect>
@ -1843,6 +1853,8 @@ https://github.com/SubtitleEdit/subtitleedit
<SortedByX>Выполнена сортировка по: {0}</SortedByX>
<BeforeAutoBalanceSelectedLines>Перед автовыравниванием выделенных строк</BeforeAutoBalanceSelectedLines>
<NumberOfLinesAutoBalancedX>Число строк с автовыравниванием: {0}</NumberOfLinesAutoBalancedX>
<BeforeEvenlyDistributeSelectedLines>Перед равномерным распределением выделенных строк</BeforeEvenlyDistributeSelectedLines>
<NumberOfLinesEvenlyDistributedX>Равномерно распределённых строк:</NumberOfLinesEvenlyDistributedX>
<BeforeRemoveLineBreaksInSelectedLines>Перед удалением разделителей из выбранных строк</BeforeRemoveLineBreaksInSelectedLines>
<NumberOfWithRemovedLineBreakX>Число строк с удалёнными разделителями: {0}</NumberOfWithRemovedLineBreakX>
<BeforeMultipleReplace>Перед множественной заменой</BeforeMultipleReplace>
@ -2334,7 +2346,7 @@ https://github.com/SubtitleEdit/subtitleedit
<Help>Справка</Help>
<FontInUi>Шрифт пользовательского интерфейса</FontInUi>
<Appearance>Интерфейс</Appearance>
<ShowFrameRate>Показывать частоту кадров в панели инструментов</ShowFrameRate>
<ShowFrameRate>Показывать частоту кадров на панели инструментов</ShowFrameRate>
<DefaultFrameRate>Частота кадров по умолчанию</DefaultFrameRate>
<DefaultFileEncoding>Кодировка файла по умолчанию</DefaultFileEncoding>
<AutoDetectAnsiEncoding>Определение ANSI кодировки</AutoDetectAnsiEncoding>
@ -2519,16 +2531,16 @@ https://github.com/SubtitleEdit/subtitleedit
<ContinuationStyleLeadingTrailingDash>Тире</ContinuationStyleLeadingTrailingDash>
<ContinuationStyleLeadingTrailingDashDots>Тире, но точки для пауз</ContinuationStyleLeadingTrailingDashDots>
<ContinuationStyleCustom>Настройка</ContinuationStyleCustom>
<CpsLineLengthStyle>cps/Длина строки</CpsLineLengthStyle>
<CpsLineLengthStyle>CPS/Длина строки</CpsLineLengthStyle>
<CpsLineLengthStyleCalcAll>Все символы</CpsLineLengthStyleCalcAll>
<CpsLineLengthStyleCalcNoSpaceCpsOnly>Исключить пробелы, только cps</CpsLineLengthStyleCalcNoSpaceCpsOnly>
<CpsLineLengthStyleCalcNoSpaceCpsOnly>Исключить пробелы, только CPS</CpsLineLengthStyleCalcNoSpaceCpsOnly>
<CpsLineLengthStyleCalcNoSpace>Исключить пробелы</CpsLineLengthStyleCalcNoSpace>
<CpsLineLengthStyleCalcCjk>CJK 1, латиница 0.5</CpsLineLengthStyleCalcCjk>
<CpsLineLengthStyleCalcCjkNoSpace>CJK 1, латиница 0.5, пробел 0</CpsLineLengthStyleCalcCjkNoSpace>
<CpsLineLengthStyleCalcIgnoreArabicDiacritics>Игнор. арабскую диакритику</CpsLineLengthStyleCalcIgnoreArabicDiacritics>
<CpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace>Игнор. арабскую диакритику/пробел</CpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace>
<CpsLineLengthStyleCalcNoSpaceOrPunctuation>Без пробелов и знак. преп. ()[]-:;,.!?</CpsLineLengthStyleCalcNoSpaceOrPunctuation>
<CpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly>Без пробелов и знак. преп., только cps</CpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly>
<CpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly>Без пробелов и знак. преп., только CPS</CpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly>
<MusicSymbol>Музыкальный символ</MusicSymbol>
<MusicSymbolsReplace>Символы на замену (через запятую)</MusicSymbolsReplace>
<FixCommonOcrErrorsUseHardcodedRules>Исправить ошибки OCR - применить жёсткие правила</FixCommonOcrErrorsUseHardcodedRules>
@ -2541,7 +2553,7 @@ https://github.com/SubtitleEdit/subtitleedit
<DefaultSaveAsFormatAuto>- Авто -</DefaultSaveAsFormatAuto>
<Favorites>Избранное</Favorites>
<FavoriteFormats>Избранные форматы</FavoriteFormats>
<FavoriteSubtitleFormatsNote>Примечание: Избранные форматы будут отображаться первыми при выборе формата, формат по умолчанию будет всегда отображаться первым</FavoriteSubtitleFormatsNote>
<FavoriteSubtitleFormatsNote>Примечание: избранные форматы будут отображаться первыми при выборе формата, формат по умолчанию будет всегда отображаться первым</FavoriteSubtitleFormatsNote>
<Shortcuts>Горячие клавиши</Shortcuts>
<Shortcut>Команда:</Shortcut>
<Control>Ctrl</Control>
@ -2621,6 +2633,7 @@ https://github.com/SubtitleEdit/subtitleedit
<MergeDialogWithPrevious>Объединить диалог с предыдущим (вставить тире)</MergeDialogWithPrevious>
<AutoBalanceSelectedLines>Автоматическая балансировка выбранных линий
</AutoBalanceSelectedLines>
<EvenlyDistributeSelectedLines>Равномерно распределить выбранные строки (CPS)</EvenlyDistributeSelectedLines>
<GoToNext>Перейти к следующей строке</GoToNext>
<GoToNextPlayTranslate>Перейти к следующей строке (и играть в «Режиме перевода»)</GoToNextPlayTranslate>
<GoToNextCursorAtEnd>Перейти к следующей строке и установить курсор в конце</GoToNextCursorAtEnd>
@ -2795,7 +2808,7 @@ https://github.com/SubtitleEdit/subtitleedit
<MainTextBoxAssaRemoveTag>Удалить тег ASSA у курсора</MainTextBoxAssaRemoveTag>
<MainFileSaveAll>Сохранить всё</MainFileSaveAll>
<Miscellaneous>Разное</Miscellaneous>
<CpsIncludesSpace>Символов/сек (cps), включая пробелы</CpsIncludesSpace>
<CpsIncludesSpace>Символов/сек (CPS), включая пробелы</CpsIncludesSpace>
<UseDoNotBreakAfterList>Не переносить после</UseDoNotBreakAfterList>
<BreakEarlyForLineEnding>Переносить после конца предложения (.!?)</BreakEarlyForLineEnding>
<BreakByPixelWidth>Переносить, где большое расстояние между символами</BreakByPixelWidth>
@ -2808,7 +2821,7 @@ https://github.com/SubtitleEdit/subtitleedit
<HowToSignUp>Как зарегистрироваться</HowToSignUp>
<MicrosoftTranslateApiKey>Ключ</MicrosoftTranslateApiKey>
<MicrosoftTranslateTokenEndpoint>Конечная точка токена</MicrosoftTranslateTokenEndpoint>
<FontNote>Примечание: Настройки шрифта применяются только к пользовательскому интерфейсу Subtitle Edit.
<FontNote>Примечание: настройки шрифта применяются только к пользовательскому интерфейсу Subtitle Edit.
Настройка шрифта субтитров обычно выполняется в видеоплеере, но также может быть выполнена при использовании формата субтитров
со встроенной информацией о шрифтах, например «Advanced SubStation Alpha», или через экспорт в форматы на основе изображений.</FontNote>
<RestoreDefaultSettings>Сбросить</RestoreDefaultSettings>
@ -2852,6 +2865,8 @@ https://github.com/SubtitleEdit/subtitleedit
<ExportAsHtml>Экспортировать как HTML…</ExportAsHtml>
<SetNewActor>Установить нового актёра/голос</SetNewActor>
<SetActorX>Установить актёра/голос {0}</SetActorX>
<Used>Используемый</Used>
<Unused>Неиспользуемый</Unused>
</Settings>
<SettingsMpv>
<DownloadMpv>Загрузить mpv</DownloadMpv>
@ -3020,8 +3035,8 @@ https://github.com/SubtitleEdit/subtitleedit
<CharactersPerSecondMinimum>Символов/сек. - минимум: {0:0.000}</CharactersPerSecondMinimum>
<CharactersPerSecondMaximum>Символов/сек. - максимум: {0:0.000}</CharactersPerSecondMaximum>
<CharactersPerSecondAverage>Символов/сек. - в среднем: {0:0.000}</CharactersPerSecondAverage>
<CharactersPerSecondExceedingOptimal>Символов/сек. - выше оптимальной ({0:0.##} cps): {1} ({2:0.00}%)</CharactersPerSecondExceedingOptimal>
<CharactersPerSecondExceedingMaximum>Символов/сек. - выше максимума ({0:0.##} cps): {1} ({2:0.00}%)</CharactersPerSecondExceedingMaximum>
<CharactersPerSecondExceedingOptimal>Символов/сек. - выше оптимальной ({0:0.##} CPS): {1} ({2:0.00}%)</CharactersPerSecondExceedingOptimal>
<CharactersPerSecondExceedingMaximum>Символов/сек. - выше максимума ({0:0.##} CPS): {1} ({2:0.00}%)</CharactersPerSecondExceedingMaximum>
<WordsPerMinuteMinimum>Слов/мин. - минимум: {0:0.000}</WordsPerMinuteMinimum>
<WordsPerMinuteMaximum>Слов/мин. - максимум: {0:0.000}</WordsPerMinuteMaximum>
<WordsPerMinuteAverage>Слов/мин. - среднее: {0:0.000}</WordsPerMinuteAverage>
@ -3150,7 +3165,7 @@ https://github.com/SubtitleEdit/subtitleedit
<TimedTextSmpteTiming>
<Title>Синхронизация SMPTE</Title>
<UseSmpteTiming>Использовать синхронизацию времени SMPTE для текущих субтитров?</UseSmpteTiming>
<SmpteTimingInfo>Примечание: Синхронизацию SMPTE можно изменить в меню «Видео»</SmpteTimingInfo>
<SmpteTimingInfo>Примечание: синхронизацию SMPTE можно изменить в меню «Видео»</SmpteTimingInfo>
<YesAlways>Да, всегда с частотой кадров, отличной от целого числа</YesAlways>
<NoNever>Нет, никогда</NoNever>
</TimedTextSmpteTiming>
@ -3166,6 +3181,21 @@ https://github.com/SubtitleEdit/subtitleedit
файла субтитров по адресу: niksedk@gmail.com</Message>
<ImportAsPlainText>Импортировать как обычный текст…</ImportAsPlainText>
</UnknownSubtitle>
<VerifyCompleteness>
<Title>Проверка полноты по другим субтитрам</Title>
<OpenControlSubtitle>Открыть контрольные субтитры</OpenControlSubtitle>
<ControlSubtitleError>Контрольные субтитры пусты или не могут быть загружены</ControlSubtitleError>
<ControlSubtitleX>Контрольные субтитры: {0}</ControlSubtitleX>
<Coverage>Покрытие</Coverage>
<CoveragePercentageX>{0:0.##}%</CoveragePercentageX>
<SortByCoverage>Сортировать по покрытию</SortByCoverage>
<SortByTime>Сортировать по времени</SortByTime>
<Reload>Перепроверить</Reload>
<Insert>Вставить</Insert>
<InsertAndNext>Вставить и к следующему</InsertAndNext>
<Dismiss>Игнорировать</Dismiss>
<DismissAndNext>Игнор. и к следующему</DismissAndNext>
</VerifyCompleteness>
<VisualSync>
<Title>Визуальная синхронизация</Title>
<StartScene>Начало сцены</StartScene>

View File

@ -962,7 +962,7 @@ Command line: {1} {2}
<FixDoubleDash>修复 '-- '为 '...'</FixDoubleDash>
<FixDoubleGreaterThan>删除 '&gt;&gt;'</FixDoubleGreaterThan>
<FixEllipsesStart>删除开头的 '...'</FixEllipsesStart>
<FixMissingOpenBracket>修复行内丢失的 '['</FixMissingOpenBracket>
<FixMissingOpenBracket>修复行内丢失的 '[' 及 '('</FixMissingOpenBracket>
<FixMusicNotation>用自己喜欢的符号替换音符 (如 âTª)</FixMusicNotation>
<FixDoubleDashExample>'Whoa-- um yeah!' -&gt; 'Whoa... um yeah!'</FixDoubleDashExample>
<FixDoubleGreaterThanExample>'&gt;&gt; Robert: Sup dude!' -&gt; 'Robert: Sup dude!'</FixDoubleGreaterThanExample>

View File

@ -1626,9 +1626,9 @@ namespace Nikse.SubtitleEdit.Logic.Ocr
}
}
string wordWithCasingChanged = GetWordWithDominatedCasing(word);
if (DoSpell(word.ToLowerInvariant()))
{
var wordWithCasingChanged = GetWordWithDominatedCasing(word);
guesses.Insert(0, wordWithCasingChanged);
}
}