79 lines
3.4 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|