File size: 1,678 Bytes
3dd5c9a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
namespace TaskTrackingSystem.Shared.Localization;

public sealed record TranslationResult(
    bool Success,
    string? TranslatedText,
    string? ErrorMessage,
    string? Provider,
    bool WasGenerated)
{
    public static TranslationResult NotConfigured() =>
        new(false, null, "Translation provider is not configured.", "none", false);

    public bool Succeeded => Success;
    public string? Text => TranslatedText;

    public static TranslationResult Generated(string text, string provider) =>
        new(true, text, null, provider, true);
}

public interface IContentTranslationService
{
    Task<TranslationResult> TranslateAsync(
        string sourceText,
        string sourceLanguage,
        string targetLanguage,
        CancellationToken cancellationToken = default);

    Task<TranslationResult> TransliterateNameAsync(
        string sourceName,
        string sourceLanguage,
        string targetLanguage,
        CancellationToken cancellationToken = default);
}

public sealed record TranslationRequest(
    string Text,
    string SourceLanguage,
    string TargetLanguage,
    bool IsName = false);

public sealed class NoOpContentTranslationService : IContentTranslationService
{
    public Task<TranslationResult> TranslateAsync(string sourceText, string sourceLanguage, string targetLanguage, CancellationToken cancellationToken = default) =>
        Task.FromResult(TranslationResult.NotConfigured());

    public Task<TranslationResult> TransliterateNameAsync(string sourceName, string sourceLanguage, string targetLanguage, CancellationToken cancellationToken = default) =>
        Task.FromResult(TranslationResult.NotConfigured());
}