I18NCommander/I18N Commander/Processor/TranslationProcessor.cs

115 lines
5.0 KiB
C#
Raw Permalink Normal View History

2022-09-17 19:47:18 +00:00
using DataModel.Database;
using DataModel.Database.Common;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
namespace Processor;
public static class TranslationProcessor
{
public static async Task<List<Translation>> GetTranslations(TextElement textElement)
{
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
var missedTranslations = new List<Translation>();
var cultureInfos = await AppSettings.GetCultureInfos();
foreach (var cultureInfo in cultureInfos)
{
if(!await db.Translations.AnyAsync(n => n.TextElement == textElement && n.Culture == cultureInfo.Code))
missedTranslations.Add(new Translation
{
TranslateManual = false,
2022-09-17 19:47:18 +00:00
Culture = cultureInfo.Code,
Text = string.Empty,
TextElement = textElement,
2022-09-17 19:47:18 +00:00
});
}
if(missedTranslations.Count > 0)
{
textElement.Translations.AddRange(missedTranslations);
db.Translations.AddRange(missedTranslations);
2022-09-17 19:47:18 +00:00
db.TextElements.Update(textElement);
await db.SaveChangesAsync();
}
return await db.Translations.Where(n => n.TextElement == textElement).ToListAsync();
}
public static async Task<ProcessorResult<Translation>> SaveChangedTranslation(int translationId, string text, bool manualFLag)
2022-09-17 19:47:18 +00:00
{
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
var dbTranslation = await db.Translations.FirstAsync(n => n.Id == translationId);
dbTranslation.Text = text;
dbTranslation.TranslateManual = manualFLag;
2022-09-17 19:47:18 +00:00
try
{
// Save the changes:
await db.SaveChangesAsync();
return new ProcessorResult<Translation>(dbTranslation);
}
catch (DbUpdateException updateException)
{
return updateException.ToProcessorResult<Translation>();
}
}
public static async Task<ProcessorResult<int>> CalculateTranslationProgress()
{
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
var numCultures = (await AppSettings.GetCultureIndices()).Count;
var numTextElements = await db.TextElements.CountAsync();
var numTotalTranslations = numCultures * numTextElements;
var numTextElementsTranslated = await db.Translations.CountAsync(n => !string.IsNullOrWhiteSpace(n.Text));
if(numTextElementsTranslated == 0 && numTotalTranslations == 0)
return new ProcessorResult<int>(100);
if (numTotalTranslations == 0)
return new ProcessorResult<int>(0);
if(numTextElementsTranslated > numTotalTranslations)
return new ProcessorResult<int>(100);
return new ProcessorResult<int>(numTextElementsTranslated * 100 / numTotalTranslations);
}
public static async Task<ProcessorResult<int>> CalculateTranslationProgress(Section section)
{
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
var numCultures = (await AppSettings.GetCultureIndices()).Count;
var numTextElements = await db.TextElements.CountAsync(n => n.Section == section);
var numTotalTranslations = numCultures * numTextElements;
var numTextElementsTranslated = await db.Translations.CountAsync(n => !string.IsNullOrWhiteSpace(n.Text) && n.TextElement.Section == section);
if(numTextElementsTranslated == 0 && numTotalTranslations == 0)
return new ProcessorResult<int>(100);
if (numTotalTranslations == 0)
return new ProcessorResult<int>(0);
if(numTextElementsTranslated > numTotalTranslations)
return new ProcessorResult<int>(100);
return new ProcessorResult<int>(numTextElementsTranslated * 100 / numTotalTranslations);
}
public static async Task<ProcessorResult<int>> CalculateTranslationProgress(TextElement textElement)
{
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
var numCultures = (await AppSettings.GetCultureIndices()).Count;
var numTotalTranslations = numCultures;
var numTextElementsTranslated = await db.Translations.CountAsync(n => !string.IsNullOrWhiteSpace(n.Text) && n.TextElement == textElement);
if(numTextElementsTranslated == 0 && numTotalTranslations == 0)
return new ProcessorResult<int>(100);
if (numTotalTranslations == 0)
return new ProcessorResult<int>(0);
if(numTextElementsTranslated > numTotalTranslations)
return new ProcessorResult<int>(100);
return new ProcessorResult<int>(numTextElementsTranslated * 100 / numTotalTranslations);
}
2022-09-17 19:47:18 +00:00
}