JD2022-TU1/main/tools/services/JD.LocalizationExport.Service/Implementation/LocalizationHelpers.cs

79 lines
3.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using JD.LocalizationExport.Service.Model;
namespace JD.LocalizationExport.Service.Implementation
{
internal static class LocalizationHelpers // TODO: Tidy up in a better class?
{
/// <summary>
/// This order method is used to keep the same order as legacy
/// </summary>
internal static IOrderedEnumerable<Language> OrderByLegacyOrder(this IEnumerable<Language> languages)
{
string[] order = { "ja", "ko", "nl", "fr", "de", "es", "en", "da", "fi", "no", "nb", "sv", "pt", "pt-br", "it", "zh", "zh-cn", "ru", "th", "zh-hant", "zh-tw" };
return languages.OrderBy(l => Array.IndexOf(order, GetLanguageCultureInfo(l.OasisName).Name.ToLower()));
}
/// <summary>
/// This method tries to convert an Oasis language into a C# standard Culture Info
/// Then each exporter can work with this CultureInfo instead of LanguageInfo
/// The problem with Oasis languages is that names can be anything, they are not standardized
/// for example in JD2018 we have "en English" and in JDNow "English"
/// Todo: contact the person in charge of Oasis to harmonize the language names
/// </summary>
internal static CultureInfo GetLanguageCultureInfo(string languageName)
{
string[] toRemove = { " - NOT_USED", " - NOT-USED", " Final", " Master Text" };
foreach (var s in toRemove)
{
languageName = languageName.Replace(s, "");
}
CultureInfo cultureInfo;
if (languageName.Contains("GAV Chinese"))
{
cultureInfo = CultureInfo.GetCultureInfo("zh"); // May be changed later
}
else if (languageName.Contains("Traditional Chinese"))
{
cultureInfo = CultureInfo.GetCultureInfo("zh-TW");
}
else if (languageName.Contains("zh Chinese")) // Should be named "Simplified Chinese" in Oasis, but it seems we can't for some reason
{
cultureInfo = CultureInfo.GetCultureInfo("zh-CN");
}
else if (languageName.Contains("Brazilian"))
{
cultureInfo = CultureInfo.GetCultureInfo("pt-BR");
}
else if (languageName.Contains("European Portuguese"))
{
cultureInfo = CultureInfo.GetCultureInfo("pt");
}
else if (languageName.Contains("Norwegian"))
{
cultureInfo = CultureInfo.GetCultureInfo("nb");
}
else
{
var allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
cultureInfo = allCultures.FirstOrDefault(x => languageName == x.EnglishName);
if (cultureInfo == null)
{
var languageNameCleaned = string.Join(" ", languageName.Split(' ').Skip(1).ToArray());
cultureInfo = allCultures.FirstOrDefault(x => languageNameCleaned == x.EnglishName);
}
}
return cultureInfo;
}
internal static bool CaseInsensitiveContains(this string s, string str)
{
return CultureInfo.CurrentCulture.CompareInfo.IndexOf(s, str, CompareOptions.IgnoreCase) >= 0;
}
}
}