using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Threading.Tasks; using gehGassi.Core.Interfaces; using gehGassi.Web.Helper; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace gehGassi.Web.Services { /// /// Service der die Verwaltung von verfügbaren Sprachen realisiert /// public class LanguageService : ILanguageService { private readonly List _languages; private readonly IOptions _localizeOptions; private readonly IHttpContextAccessor _httpContextAccessor; /// /// Erstellt eine Instanz /// /// Instanz eines LocalizationOptions /// Instanz eines IHttpContextAccessor public LanguageService(IOptions localizeOptions, IHttpContextAccessor httpContextAccessor) { _languages = new List(); _localizeOptions = localizeOptions; _httpContextAccessor = httpContextAccessor; } /// /// Gibt eine Sprache anhand des ISO2-Codes zurück /// /// /// Sprache oder null, wenn keine gefunden public Language Get(string iso2) { return GetAll().FirstOrDefault(c => c.Iso2.ToLowerInvariant() == iso2.ToLowerInvariant()); } /// /// Gibt die Standard-Sprache des Systems zurück /// /// Standard-Sprache public Language GetDefault() { var defaultLang = GetAll().FirstOrDefault(c => c.IsDefault) ?? GetAll().First(); return defaultLang; } /// /// Gibt die Auflistung aller Sprachen des Systems zurück /// /// Liste von Sprachen public List GetAll() { if (_languages.Count == 0) { var definedCodes = new List(); if (!string.IsNullOrWhiteSpace(_localizeOptions.Value.Languages)) definedCodes = _localizeOptions.Value.Languages.Split(",").ToList(); foreach (var definedCode in definedCodes) { var culture = CultureInfo.GetCultures(CultureTypes.AllCultures).FirstOrDefault(c => string.Equals(c.TwoLetterISOLanguageName, definedCode, StringComparison.InvariantCultureIgnoreCase)); if (culture != null) { var language = new Language { Iso2 = culture.TwoLetterISOLanguageName, IsDefault = false, Name = culture.NativeName, NameEnglish = culture.EnglishName }; if (string.Equals(definedCode, _localizeOptions.Value.DefaultCulture, StringComparison.InvariantCultureIgnoreCase)) language.IsDefault = true; if (_languages.FirstOrDefault(c => c.Iso2 == language.Iso2) == null) _languages.Add(language); } } } return _languages; } /// /// Gibt die Auflistung aller Sprachen des Systems zurück als ISO2 Liste /// /// Liste von Sprachen public List GetAllIso2() { var languages = GetAll(); return languages.Select(c => c.Iso2).ToList(); } /// /// Gibt eine gefilterte Liste von Sprachen zurück. Sucht nur im Namen /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Kunden public List Search(string filter) { var languages = GetAll(); return languages.Where(c => c.Name.Contains(filter) || c.NameEnglish.Contains(filter)).ToList(); } } }