Convert-it/Services/UrlTranslationService.cs

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}";
}
}
}