161 lines
6.4 KiB
C#
161 lines
6.4 KiB
C#
using System.Globalization;
|
|
|
|
namespace Convert_It_Online.Services
|
|
{
|
|
public class UrlTranslationService : IUrlTranslationService
|
|
{
|
|
private readonly Dictionary<string, Dictionary<string, string>> _areaTranslations;
|
|
private readonly Dictionary<string, Dictionary<string, string>> _controllerTranslations;
|
|
private readonly Dictionary<string, Dictionary<string, string>> _reverseAreaTranslations;
|
|
private readonly Dictionary<string, Dictionary<string, string>> _reverseControllerTranslations;
|
|
|
|
public UrlTranslationService()
|
|
{
|
|
_areaTranslations = new Dictionary<string, Dictionary<string, string>>
|
|
{
|
|
["pt-BR"] = new Dictionary<string, string>
|
|
{
|
|
["TextTools"] = "ferramentas-de-texto",
|
|
["ImageConverters"] = "conversores-de-imagem",
|
|
["DocumentConverters"] = "conversores-de-documento"
|
|
},
|
|
["es-MX"] = new Dictionary<string, string>
|
|
{
|
|
["TextTools"] = "herramientas-de-texto",
|
|
["ImageConverters"] = "convertidores-de-imagen",
|
|
["DocumentConverters"] = "convertidores-de-documento"
|
|
},
|
|
["es-CL"] = new Dictionary<string, string>
|
|
{
|
|
["TextTools"] = "herramientas-de-texto",
|
|
["ImageConverters"] = "convertidores-de-imagen",
|
|
["DocumentConverters"] = "convertidores-de-documento"
|
|
},
|
|
["es-PY"] = new Dictionary<string, string>
|
|
{
|
|
["TextTools"] = "herramientas-de-texto",
|
|
["ImageConverters"] = "convertidores-de-imagen",
|
|
["DocumentConverters"] = "convertidores-de-documento"
|
|
}
|
|
};
|
|
|
|
_controllerTranslations = new Dictionary<string, Dictionary<string, string>>
|
|
{
|
|
["pt-BR"] = new Dictionary<string, string>
|
|
{
|
|
["CaseConverter"] = "conversor-de-maiusculas-minusculas",
|
|
["JpgToWebp"] = "jpg-para-webp",
|
|
["HeicToJpg"] = "heic-para-jpg",
|
|
["PdfToText"] = "pdf-para-texto",
|
|
["PdfBarcodeLine"] = "linha-digitavel-do-pdf"
|
|
},
|
|
["es-MX"] = new Dictionary<string, string>
|
|
{
|
|
["CaseConverter"] = "conversor-de-mayusculas-minusculas",
|
|
["JpgToWebp"] = "jpg-a-webp",
|
|
["HeicToJpg"] = "heic-a-jpg",
|
|
["PdfToText"] = "pdf-a-texto",
|
|
["PdfBarcodeLine"] = "linea-digitada-desde-pdf"
|
|
},
|
|
["es-CL"] = new Dictionary<string, string>
|
|
{
|
|
["CaseConverter"] = "conversor-de-mayusculas-minusculas",
|
|
["JpgToWebp"] = "jpg-a-webp",
|
|
["HeicToJpg"] = "heic-a-jpg",
|
|
["PdfToText"] = "pdf-a-texto",
|
|
["PdfBarcodeLine"] = "linea-digitada-desde-pdf"
|
|
},
|
|
["es-PY"] = new Dictionary<string, string>
|
|
{
|
|
["CaseConverter"] = "conversor-de-mayusculas-minusculas",
|
|
["JpgToWebp"] = "jpg-a-webp",
|
|
["HeicToJpg"] = "heic-a-jpg",
|
|
["PdfToText"] = "pdf-a-texto",
|
|
["PdfBarcodeLine"] = "linea-digitada-desde-pdf"
|
|
}
|
|
};
|
|
|
|
// Create reverse mappings for lookup
|
|
_reverseAreaTranslations = CreateReverseMappings(_areaTranslations);
|
|
_reverseControllerTranslations = CreateReverseMappings(_controllerTranslations);
|
|
}
|
|
|
|
private Dictionary<string, Dictionary<string, string>> CreateReverseMappings(
|
|
Dictionary<string, Dictionary<string, string>> original)
|
|
{
|
|
var reverse = new Dictionary<string, Dictionary<string, string>>();
|
|
|
|
foreach (var culture in original.Keys)
|
|
{
|
|
reverse[culture] = new Dictionary<string, string>();
|
|
foreach (var kvp in original[culture])
|
|
{
|
|
reverse[culture][kvp.Value] = kvp.Key;
|
|
}
|
|
}
|
|
|
|
return reverse;
|
|
}
|
|
|
|
public string TranslateArea(string area, CultureInfo culture)
|
|
{
|
|
var cultureName = culture.Name;
|
|
|
|
if (_areaTranslations.TryGetValue(cultureName, out var areaDict) &&
|
|
areaDict.TryGetValue(area, out var translatedArea))
|
|
{
|
|
return translatedArea;
|
|
}
|
|
|
|
return area.ToLowerInvariant();
|
|
}
|
|
|
|
public string TranslateController(string controller, CultureInfo culture)
|
|
{
|
|
var cultureName = culture.Name;
|
|
|
|
if (_controllerTranslations.TryGetValue(cultureName, out var controllerDict) &&
|
|
controllerDict.TryGetValue(controller, out var translatedController))
|
|
{
|
|
return translatedController;
|
|
}
|
|
|
|
return controller.ToLowerInvariant();
|
|
}
|
|
|
|
public string? GetOriginalArea(string translatedArea, CultureInfo culture)
|
|
{
|
|
var cultureName = culture.Name;
|
|
|
|
if (_reverseAreaTranslations.TryGetValue(cultureName, out var areaDict) &&
|
|
areaDict.TryGetValue(translatedArea, out var originalArea))
|
|
{
|
|
return originalArea;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public string? GetOriginalController(string translatedController, CultureInfo culture)
|
|
{
|
|
var cultureName = culture.Name;
|
|
|
|
if (_reverseControllerTranslations.TryGetValue(cultureName, out var controllerDict) &&
|
|
controllerDict.TryGetValue(translatedController, out var originalController))
|
|
{
|
|
return originalController;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public string GetLocalizedUrl(string area, string controller, string action, CultureInfo culture)
|
|
{
|
|
var translatedArea = TranslateArea(area, culture);
|
|
var translatedController = TranslateController(controller, culture);
|
|
|
|
return $"/{culture.Name}/{translatedArea}/{translatedController}";
|
|
}
|
|
}
|
|
}
|