Encapsulate "CultureInfo.ThreeLetterISOLanguageName"

(fix problems with Mono/Wine)
This commit is contained in:
Nikolaj Olsson 2020-04-16 10:31:27 +02:00
parent 9e96ad4434
commit 3153326be6
9 changed files with 50 additions and 52 deletions

View File

@ -0,0 +1,28 @@
using System.Globalization;
namespace Nikse.SubtitleEdit.Core
{
public static class CultureExtensions
{
/// <summary>
/// Get three letter ISO code from CultureInfo object (three letter ISO code seems to be blank sometimes on Mono/Wine).
/// </summary>
/// <param name="cultureInfo">CultureInfo object</param>
/// <returns>Three letter ISO language code, if failure then string.Empty is returned.</returns>
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;
}
}
}

View File

@ -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

View File

@ -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;

View File

@ -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)

View File

@ -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);

View File

@ -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)
{

View File

@ -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;
}
}

View File

@ -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));
}

View File

@ -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;