diff --git a/libse/CultureExtensions.cs b/libse/CultureExtensions.cs new file mode 100644 index 000000000..cf6df81b5 --- /dev/null +++ b/libse/CultureExtensions.cs @@ -0,0 +1,28 @@ +using System.Globalization; + +namespace Nikse.SubtitleEdit.Core +{ + public static class CultureExtensions + { + /// + /// Get three letter ISO code from CultureInfo object (three letter ISO code seems to be blank sometimes on Mono/Wine). + /// + /// CultureInfo object + /// Three letter ISO language code, if failure then string.Empty is returned. + public static string GetThreeLetterIsoLanguageName(this CultureInfo cultureInfo) + { + if (cultureInfo == null) + { + return string.Empty; + } + + var cultureThreeLetterIsoLanguageName = cultureInfo.ThreeLetterISOLanguageName; + if (string.IsNullOrEmpty(cultureThreeLetterIsoLanguageName)) + { + cultureThreeLetterIsoLanguageName = Iso639Dash2LanguageCode.GetThreeLetterCodeFromTwoLetterCode(cultureInfo.TwoLetterISOLanguageName); + } + + return cultureThreeLetterIsoLanguageName; + } + } +} diff --git a/libse/SubtitleFormats/ESubXf.cs b/libse/SubtitleFormats/ESubXf.cs index 2181c0477..94c51d12b 100644 --- a/libse/SubtitleFormats/ESubXf.cs +++ b/libse/SubtitleFormats/ESubXf.cs @@ -37,7 +37,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats try { var ci = new CultureInfo(LanguageAutoDetect.AutoDetectGoogleLanguage(subtitle)); - threeLetterLanguage = ci.ThreeLetterISOLanguageName; + threeLetterLanguage = ci.GetThreeLetterIsoLanguageName(); languageDisplay = ci.EnglishName; } catch diff --git a/libse/TesseractDictionary.cs b/libse/TesseractDictionary.cs index 61e58e5ea..bfecedb19 100644 --- a/libse/TesseractDictionary.cs +++ b/libse/TesseractDictionary.cs @@ -174,7 +174,7 @@ namespace Nikse.SubtitleEdit.Core try { - var cultureInfo = cultures.FirstOrDefault(ci => string.Equals(ci.ThreeLetterISOLanguageName, code, StringComparison.OrdinalIgnoreCase)); + var cultureInfo = cultures.FirstOrDefault(ci => string.Equals(ci.GetThreeLetterIsoLanguageName(), code, StringComparison.OrdinalIgnoreCase)); if (cultureInfo != null) { code = cultureInfo.EnglishName; diff --git a/src/Forms/FixCommonErrors.cs b/src/Forms/FixCommonErrors.cs index 7674f6d6e..bd6bf1b22 100644 --- a/src/Forms/FixCommonErrors.cs +++ b/src/Forms/FixCommonErrors.cs @@ -151,7 +151,7 @@ namespace Nikse.SubtitleEdit.Forms { _autoDetectGoogleLanguage = language; var ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage); - string threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName; + string threeLetterIsoLanguageName = ci.GetThreeLetterIsoLanguageName(); InitializeLanguageNames(new LanguageItem(null, "-Auto-")); int languageIndex = 0; @@ -217,7 +217,7 @@ namespace Nikse.SubtitleEdit.Forms { _autoDetectGoogleLanguage = language; var ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage); - string threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName; + string threeLetterIsoLanguageName = ci.GetThreeLetterIsoLanguageName(); InitializeLanguageNames(); int languageIndex = 0; int j = 0; @@ -267,7 +267,7 @@ namespace Nikse.SubtitleEdit.Forms } CultureInfo ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage); - string threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName; + string threeLetterIsoLanguageName = ci.GetThreeLetterIsoLanguageName(); InitializeLanguageNames(); int languageIndex = 0; int j = 0; @@ -1869,7 +1869,7 @@ namespace Nikse.SubtitleEdit.Forms if (comboBoxLanguage.SelectedItem is LanguageItem ci) { _autoDetectGoogleLanguage = ci.Code.TwoLetterISOLanguageName; - AddFixActions(ci.Code.ThreeLetterISOLanguageName); + AddFixActions(ci.Code.GetThreeLetterIsoLanguageName()); } } } @@ -1882,7 +1882,7 @@ namespace Nikse.SubtitleEdit.Forms private void buttonResetDefault_Click(object sender, EventArgs e) { Configuration.Settings.CommonErrors.SetDefaultFixes(); - AddFixActions(CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage).ThreeLetterISOLanguageName); + AddFixActions(CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage).GetThreeLetterIsoLanguageName()); } private void subtitleListView1_KeyDown(object sender, KeyEventArgs e) diff --git a/src/Forms/Main.cs b/src/Forms/Main.cs index 8442ef09d..de6e948b3 100644 --- a/src/Forms/Main.cs +++ b/src/Forms/Main.cs @@ -7578,7 +7578,7 @@ namespace Nikse.SubtitleEdit.Forms { var twoLetterLower = x.TwoLetterISOLanguageName.ToLowerInvariant(); if (!languages.Contains(twoLetterLower) && - !languages.Contains(x.ThreeLetterISOLanguageName.ToLowerInvariant()) && + !languages.Contains(x.GetThreeLetterIsoLanguageName().ToLowerInvariant()) && twoLetterLower != "iv") { moreLanguages.Add(x); diff --git a/src/Forms/Ocr/AddToOcrReplaceList.cs b/src/Forms/Ocr/AddToOcrReplaceList.cs index 82abddea9..5b864eb1b 100644 --- a/src/Forms/Ocr/AddToOcrReplaceList.cs +++ b/src/Forms/Ocr/AddToOcrReplaceList.cs @@ -41,7 +41,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr try { var ci = CultureInfo.GetCultureInfo(languageString.Replace('_', '-')); - _threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName; + _threeLetterIsoLanguageName = ci.GetThreeLetterIsoLanguageName(); } catch (CultureNotFoundException exception) { diff --git a/src/Forms/Ocr/VobSubOcr.cs b/src/Forms/Ocr/VobSubOcr.cs index a06786055..d2e455971 100644 --- a/src/Forms/Ocr/VobSubOcr.cs +++ b/src/Forms/Ocr/VobSubOcr.cs @@ -7013,17 +7013,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr if (!string.IsNullOrEmpty(LanguageString)) { var ci = CultureInfo.GetCultureInfo(LanguageString.Replace("_", "-")); - _languageId = ci.ThreeLetterISOLanguageName; - threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName; - if (string.IsNullOrEmpty(threeLetterIsoLanguageName)) - { - var threeLetters = Iso639Dash2LanguageCode.GetThreeLetterCodeFromTwoLetterCode(ci.TwoLetterISOLanguageName); - if (!string.IsNullOrEmpty(threeLetters)) - { - threeLetterIsoLanguageName = threeLetters; - _languageId = threeLetters; - } - } + _languageId = ci.GetThreeLetterIsoLanguageName(); } } catch @@ -7561,15 +7551,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr _ocrFixEngine?.Dispose(); _ocrFixEngine = null; var ci = CultureInfo.GetCultureInfo(language.Replace("_", "-")); - threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName; - if (string.IsNullOrEmpty(threeLetterIsoLanguageName)) - { - var threeLetters = Iso639Dash2LanguageCode.GetThreeLetterCodeFromTwoLetterCode(ci.TwoLetterISOLanguageName); - if (!string.IsNullOrEmpty(threeLetters)) - { - threeLetterIsoLanguageName = threeLetters; - } - } + threeLetterIsoLanguageName = ci.GetThreeLetterIsoLanguageName(); } catch { @@ -7580,15 +7562,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr { if (string.Equals(x.TwoLetterISOLanguageName, arr[0], StringComparison.OrdinalIgnoreCase)) { - threeLetterIsoLanguageName = x.ThreeLetterISOLanguageName; - if (string.IsNullOrEmpty(threeLetterIsoLanguageName)) - { - var threeLetters = Iso639Dash2LanguageCode.GetThreeLetterCodeFromTwoLetterCode(x.TwoLetterISOLanguageName); - if (!string.IsNullOrEmpty(threeLetters)) - { - threeLetterIsoLanguageName = threeLetters; - } - } + threeLetterIsoLanguageName = x.GetThreeLetterIsoLanguageName(); break; } } diff --git a/src/Forms/Settings.cs b/src/Forms/Settings.cs index 073f05d3e..16ba86b02 100644 --- a/src/Forms/Settings.cs +++ b/src/Forms/Settings.cs @@ -1033,7 +1033,7 @@ namespace Nikse.SubtitleEdit.Forms } } comboBoxRulesProfileName.EndUpdate(); - if (comboBoxRulesProfileName.SelectedIndex < 0 && comboBoxRulesProfileName.Items.Count > 0) + if (comboBoxRulesProfileName.SelectedIndex < 0 && comboBoxRulesProfileName.Items.Count > 0 && comboBoxRulesProfileName.Items.Count > 0) { comboBoxRulesProfileName.SelectedIndex = 0; } @@ -1493,8 +1493,8 @@ namespace Nikse.SubtitleEdit.Forms // Neutral culture e.g: "en" for all (en-US, en-GB, en-JM...) foreach (var culture in CultureInfo.GetCultures(CultureTypes.NeutralCultures)) { - string ocrFixGeneralFile = Path.Combine(dir, culture.ThreeLetterISOLanguageName + "_OCRFixReplaceList.xml"); - string ocrFixUserFile = Path.Combine(dir, culture.ThreeLetterISOLanguageName + "_OCRFixReplaceList_User.xml"); + string ocrFixGeneralFile = Path.Combine(dir, culture.GetThreeLetterIsoLanguageName() + "_OCRFixReplaceList.xml"); + string ocrFixUserFile = Path.Combine(dir, culture.GetThreeLetterIsoLanguageName() + "_OCRFixReplaceList_User.xml"); string namesFile = Path.Combine(dir, culture.TwoLetterISOLanguageName + "_names.xml"); if (File.Exists(ocrFixGeneralFile) || File.Exists(ocrFixUserFile) || File.Exists(namesFile)) { @@ -1502,7 +1502,7 @@ namespace Nikse.SubtitleEdit.Forms foreach (var ci in cultures) { // If culture is already added to the list, it doesn't matter if it's "culture specific" do not re-add. - if (ci.ThreeLetterISOLanguageName.Equals(culture.ThreeLetterISOLanguageName, StringComparison.Ordinal)) + if (ci.GetThreeLetterIsoLanguageName().Equals(culture.GetThreeLetterIsoLanguageName(), StringComparison.Ordinal)) { alreadyInList = true; break; @@ -1981,7 +1981,7 @@ namespace Nikse.SubtitleEdit.Forms return; } - _ocrFixReplaceList = OcrFixReplaceList.FromLanguageId(cb.CultureInfo.ThreeLetterISOLanguageName); + _ocrFixReplaceList = OcrFixReplaceList.FromLanguageId(cb.CultureInfo.GetThreeLetterIsoLanguageName()); if (reloadListBox) { listBoxOcrFixList.BeginUpdate(); @@ -3219,7 +3219,7 @@ namespace Nikse.SubtitleEdit.Forms _rulesProfiles[idx].MergeLinesShorterThan = comboBoxMergeShortLineLength.SelectedIndex + 5; _rulesProfiles[idx].DialogStyle = DialogSplitMerge.GetDialogStyleFromIndex(comboBoxDialogStyle.SelectedIndex); _rulesProfiles[idx].ContinuationStyle = ContinuationUtilities.GetContinuationStyleFromIndex(comboBoxContinuationStyle.SelectedIndex); - + toolTipContinuationPreview.RemoveAll(); toolTipContinuationPreview.SetToolTip(comboBoxContinuationStyle, ContinuationUtilities.GetContinuationStylePreview(_rulesProfiles[idx].ContinuationStyle)); } diff --git a/src/Logic/Ocr/OcrFixEngine.cs b/src/Logic/Ocr/OcrFixEngine.cs index 8ceaf090e..b172bbb4d 100644 --- a/src/Logic/Ocr/OcrFixEngine.cs +++ b/src/Logic/Ocr/OcrFixEngine.cs @@ -207,10 +207,8 @@ namespace Nikse.SubtitleEdit.Logic.Ocr } var ci = CultureInfo.GetCultureInfo(name); - var threeLetterCode = Iso639Dash2LanguageCode.GetThreeLetterCodeFromTwoLetterCode(ci.TwoLetterISOLanguageName); - if (ci.ThreeLetterISOLanguageName == threeLetterIsoLanguageName || - threeLetterCode == threeLetterIsoLanguageName || - ci.ThreeLetterWindowsLanguageName.Equals(threeLetterIsoLanguageName, StringComparison.OrdinalIgnoreCase)) + if (ci.GetThreeLetterIsoLanguageName() == threeLetterIsoLanguageName || + ci.GetThreeLetterIsoLanguageName().Equals(threeLetterIsoLanguageName, StringComparison.OrdinalIgnoreCase)) { dictionaryFileName = dic; break; @@ -248,10 +246,8 @@ namespace Nikse.SubtitleEdit.Logic.Ocr } var ci = CultureInfo.GetCultureInfo(name); - var threeLetterCode = Iso639Dash2LanguageCode.GetThreeLetterCodeFromTwoLetterCode(ci.TwoLetterISOLanguageName); - if (ci.ThreeLetterISOLanguageName == threeLetterIsoLanguageName || - threeLetterCode == threeLetterIsoLanguageName || - ci.ThreeLetterWindowsLanguageName.Equals(threeLetterIsoLanguageName, StringComparison.OrdinalIgnoreCase)) + if (ci.GetThreeLetterIsoLanguageName() == threeLetterIsoLanguageName || + ci.GetThreeLetterIsoLanguageName().Equals(threeLetterIsoLanguageName, StringComparison.OrdinalIgnoreCase)) { dicFileName = dic; break;