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 try
{ {
var ci = new CultureInfo(LanguageAutoDetect.AutoDetectGoogleLanguage(subtitle)); var ci = new CultureInfo(LanguageAutoDetect.AutoDetectGoogleLanguage(subtitle));
threeLetterLanguage = ci.ThreeLetterISOLanguageName; threeLetterLanguage = ci.GetThreeLetterIsoLanguageName();
languageDisplay = ci.EnglishName; languageDisplay = ci.EnglishName;
} }
catch catch

View File

@ -174,7 +174,7 @@ namespace Nikse.SubtitleEdit.Core
try 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) if (cultureInfo != null)
{ {
code = cultureInfo.EnglishName; code = cultureInfo.EnglishName;

View File

@ -151,7 +151,7 @@ namespace Nikse.SubtitleEdit.Forms
{ {
_autoDetectGoogleLanguage = language; _autoDetectGoogleLanguage = language;
var ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage); var ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage);
string threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName; string threeLetterIsoLanguageName = ci.GetThreeLetterIsoLanguageName();
InitializeLanguageNames(new LanguageItem(null, "-Auto-")); InitializeLanguageNames(new LanguageItem(null, "-Auto-"));
int languageIndex = 0; int languageIndex = 0;
@ -217,7 +217,7 @@ namespace Nikse.SubtitleEdit.Forms
{ {
_autoDetectGoogleLanguage = language; _autoDetectGoogleLanguage = language;
var ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage); var ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage);
string threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName; string threeLetterIsoLanguageName = ci.GetThreeLetterIsoLanguageName();
InitializeLanguageNames(); InitializeLanguageNames();
int languageIndex = 0; int languageIndex = 0;
int j = 0; int j = 0;
@ -267,7 +267,7 @@ namespace Nikse.SubtitleEdit.Forms
} }
CultureInfo ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage); CultureInfo ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage);
string threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName; string threeLetterIsoLanguageName = ci.GetThreeLetterIsoLanguageName();
InitializeLanguageNames(); InitializeLanguageNames();
int languageIndex = 0; int languageIndex = 0;
int j = 0; int j = 0;
@ -1869,7 +1869,7 @@ namespace Nikse.SubtitleEdit.Forms
if (comboBoxLanguage.SelectedItem is LanguageItem ci) if (comboBoxLanguage.SelectedItem is LanguageItem ci)
{ {
_autoDetectGoogleLanguage = ci.Code.TwoLetterISOLanguageName; _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) private void buttonResetDefault_Click(object sender, EventArgs e)
{ {
Configuration.Settings.CommonErrors.SetDefaultFixes(); Configuration.Settings.CommonErrors.SetDefaultFixes();
AddFixActions(CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage).ThreeLetterISOLanguageName); AddFixActions(CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage).GetThreeLetterIsoLanguageName());
} }
private void subtitleListView1_KeyDown(object sender, KeyEventArgs e) private void subtitleListView1_KeyDown(object sender, KeyEventArgs e)

View File

@ -7578,7 +7578,7 @@ namespace Nikse.SubtitleEdit.Forms
{ {
var twoLetterLower = x.TwoLetterISOLanguageName.ToLowerInvariant(); var twoLetterLower = x.TwoLetterISOLanguageName.ToLowerInvariant();
if (!languages.Contains(twoLetterLower) && if (!languages.Contains(twoLetterLower) &&
!languages.Contains(x.ThreeLetterISOLanguageName.ToLowerInvariant()) && !languages.Contains(x.GetThreeLetterIsoLanguageName().ToLowerInvariant()) &&
twoLetterLower != "iv") twoLetterLower != "iv")
{ {
moreLanguages.Add(x); moreLanguages.Add(x);

View File

@ -41,7 +41,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
try try
{ {
var ci = CultureInfo.GetCultureInfo(languageString.Replace('_', '-')); var ci = CultureInfo.GetCultureInfo(languageString.Replace('_', '-'));
_threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName; _threeLetterIsoLanguageName = ci.GetThreeLetterIsoLanguageName();
} }
catch (CultureNotFoundException exception) catch (CultureNotFoundException exception)
{ {

View File

@ -7013,17 +7013,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
if (!string.IsNullOrEmpty(LanguageString)) if (!string.IsNullOrEmpty(LanguageString))
{ {
var ci = CultureInfo.GetCultureInfo(LanguageString.Replace("_", "-")); var ci = CultureInfo.GetCultureInfo(LanguageString.Replace("_", "-"));
_languageId = ci.ThreeLetterISOLanguageName; _languageId = ci.GetThreeLetterIsoLanguageName();
threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName;
if (string.IsNullOrEmpty(threeLetterIsoLanguageName))
{
var threeLetters = Iso639Dash2LanguageCode.GetThreeLetterCodeFromTwoLetterCode(ci.TwoLetterISOLanguageName);
if (!string.IsNullOrEmpty(threeLetters))
{
threeLetterIsoLanguageName = threeLetters;
_languageId = threeLetters;
}
}
} }
} }
catch catch
@ -7561,15 +7551,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
_ocrFixEngine?.Dispose(); _ocrFixEngine?.Dispose();
_ocrFixEngine = null; _ocrFixEngine = null;
var ci = CultureInfo.GetCultureInfo(language.Replace("_", "-")); var ci = CultureInfo.GetCultureInfo(language.Replace("_", "-"));
threeLetterIsoLanguageName = ci.ThreeLetterISOLanguageName; threeLetterIsoLanguageName = ci.GetThreeLetterIsoLanguageName();
if (string.IsNullOrEmpty(threeLetterIsoLanguageName))
{
var threeLetters = Iso639Dash2LanguageCode.GetThreeLetterCodeFromTwoLetterCode(ci.TwoLetterISOLanguageName);
if (!string.IsNullOrEmpty(threeLetters))
{
threeLetterIsoLanguageName = threeLetters;
}
}
} }
catch catch
{ {
@ -7580,15 +7562,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
{ {
if (string.Equals(x.TwoLetterISOLanguageName, arr[0], StringComparison.OrdinalIgnoreCase)) if (string.Equals(x.TwoLetterISOLanguageName, arr[0], StringComparison.OrdinalIgnoreCase))
{ {
threeLetterIsoLanguageName = x.ThreeLetterISOLanguageName; threeLetterIsoLanguageName = x.GetThreeLetterIsoLanguageName();
if (string.IsNullOrEmpty(threeLetterIsoLanguageName))
{
var threeLetters = Iso639Dash2LanguageCode.GetThreeLetterCodeFromTwoLetterCode(x.TwoLetterISOLanguageName);
if (!string.IsNullOrEmpty(threeLetters))
{
threeLetterIsoLanguageName = threeLetters;
}
}
break; break;
} }
} }

View File

@ -1033,7 +1033,7 @@ namespace Nikse.SubtitleEdit.Forms
} }
} }
comboBoxRulesProfileName.EndUpdate(); 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; comboBoxRulesProfileName.SelectedIndex = 0;
} }
@ -1493,8 +1493,8 @@ namespace Nikse.SubtitleEdit.Forms
// Neutral culture e.g: "en" for all (en-US, en-GB, en-JM...) // Neutral culture e.g: "en" for all (en-US, en-GB, en-JM...)
foreach (var culture in CultureInfo.GetCultures(CultureTypes.NeutralCultures)) foreach (var culture in CultureInfo.GetCultures(CultureTypes.NeutralCultures))
{ {
string ocrFixGeneralFile = Path.Combine(dir, culture.ThreeLetterISOLanguageName + "_OCRFixReplaceList.xml"); string ocrFixGeneralFile = Path.Combine(dir, culture.GetThreeLetterIsoLanguageName() + "_OCRFixReplaceList.xml");
string ocrFixUserFile = Path.Combine(dir, culture.ThreeLetterISOLanguageName + "_OCRFixReplaceList_User.xml"); string ocrFixUserFile = Path.Combine(dir, culture.GetThreeLetterIsoLanguageName() + "_OCRFixReplaceList_User.xml");
string namesFile = Path.Combine(dir, culture.TwoLetterISOLanguageName + "_names.xml"); string namesFile = Path.Combine(dir, culture.TwoLetterISOLanguageName + "_names.xml");
if (File.Exists(ocrFixGeneralFile) || File.Exists(ocrFixUserFile) || File.Exists(namesFile)) if (File.Exists(ocrFixGeneralFile) || File.Exists(ocrFixUserFile) || File.Exists(namesFile))
{ {
@ -1502,7 +1502,7 @@ namespace Nikse.SubtitleEdit.Forms
foreach (var ci in cultures) 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 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; alreadyInList = true;
break; break;
@ -1981,7 +1981,7 @@ namespace Nikse.SubtitleEdit.Forms
return; return;
} }
_ocrFixReplaceList = OcrFixReplaceList.FromLanguageId(cb.CultureInfo.ThreeLetterISOLanguageName); _ocrFixReplaceList = OcrFixReplaceList.FromLanguageId(cb.CultureInfo.GetThreeLetterIsoLanguageName());
if (reloadListBox) if (reloadListBox)
{ {
listBoxOcrFixList.BeginUpdate(); listBoxOcrFixList.BeginUpdate();
@ -3219,7 +3219,7 @@ namespace Nikse.SubtitleEdit.Forms
_rulesProfiles[idx].MergeLinesShorterThan = comboBoxMergeShortLineLength.SelectedIndex + 5; _rulesProfiles[idx].MergeLinesShorterThan = comboBoxMergeShortLineLength.SelectedIndex + 5;
_rulesProfiles[idx].DialogStyle = DialogSplitMerge.GetDialogStyleFromIndex(comboBoxDialogStyle.SelectedIndex); _rulesProfiles[idx].DialogStyle = DialogSplitMerge.GetDialogStyleFromIndex(comboBoxDialogStyle.SelectedIndex);
_rulesProfiles[idx].ContinuationStyle = ContinuationUtilities.GetContinuationStyleFromIndex(comboBoxContinuationStyle.SelectedIndex); _rulesProfiles[idx].ContinuationStyle = ContinuationUtilities.GetContinuationStyleFromIndex(comboBoxContinuationStyle.SelectedIndex);
toolTipContinuationPreview.RemoveAll(); toolTipContinuationPreview.RemoveAll();
toolTipContinuationPreview.SetToolTip(comboBoxContinuationStyle, ContinuationUtilities.GetContinuationStylePreview(_rulesProfiles[idx].ContinuationStyle)); 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 ci = CultureInfo.GetCultureInfo(name);
var threeLetterCode = Iso639Dash2LanguageCode.GetThreeLetterCodeFromTwoLetterCode(ci.TwoLetterISOLanguageName); if (ci.GetThreeLetterIsoLanguageName() == threeLetterIsoLanguageName ||
if (ci.ThreeLetterISOLanguageName == threeLetterIsoLanguageName || ci.GetThreeLetterIsoLanguageName().Equals(threeLetterIsoLanguageName, StringComparison.OrdinalIgnoreCase))
threeLetterCode == threeLetterIsoLanguageName ||
ci.ThreeLetterWindowsLanguageName.Equals(threeLetterIsoLanguageName, StringComparison.OrdinalIgnoreCase))
{ {
dictionaryFileName = dic; dictionaryFileName = dic;
break; break;
@ -248,10 +246,8 @@ namespace Nikse.SubtitleEdit.Logic.Ocr
} }
var ci = CultureInfo.GetCultureInfo(name); var ci = CultureInfo.GetCultureInfo(name);
var threeLetterCode = Iso639Dash2LanguageCode.GetThreeLetterCodeFromTwoLetterCode(ci.TwoLetterISOLanguageName); if (ci.GetThreeLetterIsoLanguageName() == threeLetterIsoLanguageName ||
if (ci.ThreeLetterISOLanguageName == threeLetterIsoLanguageName || ci.GetThreeLetterIsoLanguageName().Equals(threeLetterIsoLanguageName, StringComparison.OrdinalIgnoreCase))
threeLetterCode == threeLetterIsoLanguageName ||
ci.ThreeLetterWindowsLanguageName.Equals(threeLetterIsoLanguageName, StringComparison.OrdinalIgnoreCase))
{ {
dicFileName = dic; dicFileName = dic;
break; break;