using System.Collections.Generic; using System.Threading.Tasks; namespace gehGassi.Domain.Localization { /// /// Kennzeichnet eine Entität als Entität die übersetzbare Eigenschaften aufweist /// public interface ILocalizable { /// /// In welcher Sprache sollen die übersetzbaren Felder abgerufen oder gesetzt werden? /// /// ISO2 codierte Sprache void SetLanguage(string language); /// /// Setzt eine Übersetzung direkt für ein Feld mittels Reflection /// /// Name der Eigenschaft /// ISO2 codierte Sprache /// Zu setzender Wert void Set(string property, string language, string value); /// /// Setzt alle übersetzungen für ein Feld mittels Reflection. /// Achtung: das gesamte Dictionary wird ersetzt /// /// Name der Eigenschaft /// Zu setzendes Dictionary void Set(string property, Dictionary dictionary); /// /// Ruft eine Übersetzung direkt für ein Feld mittels Reflection /// /// Name der Eigenschaft /// ISO2 codierte Sprache /// Gibt an ob leer als Rückgabe gültig ist und nicht die Default-Werte genommen werden sollen wenn eine Übersetzung fehlt /// Wert string Get(string property, string language, bool allowEmpty = false); /// /// Ruft alle Übersetzungen direkt für ein Feld mittels Reflection /// /// Name der Eigenschaft /// Dictionary mit allen Übersetzungen Dictionary Get(string property); /// /// Gibt eine Liste aller verfügbaren Sprachen für ein Feld zurück. /// Basiert auf den bereits gesetzten Sprachen /// /// Name der Eigenschaft /// Liste verfügbarer Sprachen List GetLanguages(string property); } /// /// Hilfserweiterungen für Localizable /// public static class LocalizableExtensions { public static Task SetLanguageAsync(this Task item, string language) where T : class, ILocalizable { var localItem = item.Result; localItem?.SetLanguage(language); return Task.FromResult(localItem); } public static IEnumerable SetLanguage(this IEnumerable items, string language) where T : class, ILocalizable { foreach (var item in items) { item.SetLanguage(language); yield return item; } } public static Task> SetLanguageAsync(this Task> items, string language) where T : class, ILocalizable { var localItems = items.Result; var resultItems = new List(); foreach (var item in localItems) { item.SetLanguage(language); resultItems.Add(item); } return Task.FromResult((IEnumerable)resultItems); } } }