113 lines
4.3 KiB
C#
113 lines
4.3 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Service der die Verwaltung von verfügbaren Sprachen realisiert
|
|
/// </summary>
|
|
public class LanguageService : ILanguageService
|
|
{
|
|
private readonly List<Language> _languages;
|
|
private readonly IOptions<LocalizationOptions> _localizeOptions;
|
|
private readonly IHttpContextAccessor _httpContextAccessor;
|
|
|
|
/// <summary>
|
|
/// Erstellt eine Instanz
|
|
/// </summary>
|
|
/// <param name="localizeOptions">Instanz eines LocalizationOptions</param>
|
|
/// <param name="httpContextAccessor">Instanz eines IHttpContextAccessor</param>
|
|
public LanguageService(IOptions<LocalizationOptions> localizeOptions, IHttpContextAccessor httpContextAccessor)
|
|
{
|
|
_languages = new List<Language>();
|
|
_localizeOptions = localizeOptions;
|
|
_httpContextAccessor = httpContextAccessor;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine Sprache anhand des ISO2-Codes zurück
|
|
/// </summary>
|
|
/// <param name="iso2"></param>
|
|
/// <returns>Sprache oder null, wenn keine gefunden</returns>
|
|
public Language Get(string iso2)
|
|
{
|
|
return GetAll().FirstOrDefault(c => c.Iso2.ToLowerInvariant() == iso2.ToLowerInvariant());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt die Standard-Sprache des Systems zurück
|
|
/// </summary>
|
|
/// <returns>Standard-Sprache</returns>
|
|
public Language GetDefault()
|
|
{
|
|
var defaultLang = GetAll().FirstOrDefault(c => c.IsDefault) ?? GetAll().First();
|
|
return defaultLang;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt die Auflistung aller Sprachen des Systems zurück
|
|
/// </summary>
|
|
/// <returns>Liste von Sprachen</returns>
|
|
public List<Language> GetAll()
|
|
{
|
|
if (_languages.Count == 0)
|
|
{
|
|
var definedCodes = new List<string>();
|
|
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt die Auflistung aller Sprachen des Systems zurück als ISO2 Liste
|
|
/// </summary>
|
|
/// <returns>Liste von Sprachen</returns>
|
|
public List<string> GetAllIso2()
|
|
{
|
|
var languages = GetAll();
|
|
return languages.Select(c => c.Iso2).ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine gefilterte Liste von Sprachen zurück. Sucht nur im Namen
|
|
/// </summary>
|
|
/// <param name="filter">Filterbegriff der in bestimmten Feldern gesucht wird</param>
|
|
/// <returns>List betroffener Kunden</returns>
|
|
public List<Language> Search(string filter)
|
|
{
|
|
var languages = GetAll();
|
|
return languages.Where(c => c.Name.Contains(filter) || c.NameEnglish.Contains(filter)).ToList();
|
|
}
|
|
}
|
|
}
|