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