using decePubClient.Resources;
using Microsoft.Extensions.Localization;
using PrivaPub.ClientModels.Resources;
namespace collAnon.Client.Services
{
///
/// The app's localizer: looks a key up in Resources/AllStrings, then in PrivaPub.ClientModels' FieldsNameResource and
/// ErrorsResource, and falls back to the key itself (formatted with the arguments), so a missing key shows its
/// English text instead of failing.
///
public sealed class CoalescingStringLocalizer(IStringLocalizer baseLocalizer, IStringLocalizer fieldsLocalizer,
IStringLocalizer errorsLocalizer)
{
public IStringLocalizer Base => baseLocalizer;
public IStringLocalizer Fields => fieldsLocalizer;
public IStringLocalizer Errors => errorsLocalizer;
public LocalizedString this[string name]
{
get
{
try
{
if (!baseLocalizer[name].ResourceNotFound)
return baseLocalizer[name];
if (!fieldsLocalizer[name].ResourceNotFound)
return fieldsLocalizer[name];
if (!errorsLocalizer[name].ResourceNotFound)
return errorsLocalizer[name];
return new(name, name, true);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return new(name, name, true);
}
}
}
public LocalizedString this[string name, params object[] arguments]
{
get
{
try
{
if (!baseLocalizer[name].ResourceNotFound)
return baseLocalizer[name, arguments];
if (!fieldsLocalizer[name].ResourceNotFound)
return fieldsLocalizer[name, arguments];
if (!errorsLocalizer[name].ResourceNotFound)
return errorsLocalizer[name, arguments];
return new(name, string.Format(name, arguments), true);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return new(name, name, true);
}
}
}
}
}