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