JD2022-TU1/main/tools/modules/JD.Oasis.Module/OasisHelpers.cs

107 lines
4.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using JD.Localization.Core.Model;
using JD.Localization.Core.Model.Attributes;
using JD.Oasis.Service.API;
using OasisLanguage = JD.Oasis.Service.API.Language;
namespace JD.Oasis.Module
{
// TODO: Clean this helper class properly
public class OasisHelpers
{
public static async Task<Dictionary<UafLanguage, string>> GetOasisNamesForLanguagesAsync(IOasisService oasisService, IEnumerable<UafLanguage> uafLanguages)
{
IEnumerable<OasisLanguage> oasisLanguages = await oasisService.GetLanguagesAsync();
Dictionary<UafLanguage, string> oasisNameForLanguages = new Dictionary<UafLanguage, string>();
uafLanguages = uafLanguages.ToArray();
foreach (OasisLanguage oasisLanguage in oasisLanguages)
{
UafLanguage correspondingUafLanguage = OasisHelpers.GetUafLanguage(oasisLanguage);
if (uafLanguages.Contains(correspondingUafLanguage))
{
oasisNameForLanguages[correspondingUafLanguage] = oasisLanguage.Name;
}
}
return oasisNameForLanguages;
}
public static UafLanguage GetUafLanguage(OasisLanguage language)
{
if (language.IsMaster)
{
return UafLanguage.ITF_LANGUAGE_DEV_REFERENCE;
}
var cultureInfo = GetLanguageCultureInfo(language.Name);
foreach (var uafLanguage in Enum.GetValues(typeof(UafLanguage)).Cast<UafLanguage>())
{
var memInfo = typeof(UafLanguage).GetMember(uafLanguage.ToString());
var attributes = memInfo[0].GetCustomAttributes(typeof(CultureNameAttribute), false);
if (attributes.Length > 0)
{
var cultureNames = ((CultureNameAttribute)attributes[0]).Values;
if (cultureNames.Any(cultureName => cultureName.Equals(cultureInfo.Name, StringComparison.OrdinalIgnoreCase)))
{
return uafLanguage;
}
}
}
return UafLanguage.ITF_LANGUAGE_UNKNOWN;
}
public 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;
}
}
}