diff --git a/Oqtane.Server/Pages/_Host.cshtml.cs b/Oqtane.Server/Pages/_Host.cshtml.cs index ee7c43ce..24aa812e 100644 --- a/Oqtane.Server/Pages/_Host.cshtml.cs +++ b/Oqtane.Server/Pages/_Host.cshtml.cs @@ -5,6 +5,7 @@ using Oqtane.Modules; using Oqtane.Models; using Oqtane.Themes; using System; +using System.Globalization; using System.Linq; using System.Reflection; using Microsoft.AspNetCore.Http.Extensions; @@ -19,13 +20,20 @@ namespace Oqtane.Pages private IConfiguration _configuration; private readonly SiteState _state; private readonly IAliasRepository _aliases; + private readonly ILocalizationManager _localizationManager; private readonly ILanguageRepository _languages; - public HostModel(IConfiguration configuration, SiteState state, IAliasRepository aliases, ILanguageRepository languages) + public HostModel( + IConfiguration configuration, + SiteState state, + IAliasRepository aliases, + ILocalizationManager localizationManager, + ILanguageRepository languages) { _configuration = configuration; _state = state; _aliases = aliases; + _localizationManager = localizationManager; _languages = languages; } @@ -45,25 +53,21 @@ namespace Oqtane.Pages // if culture not specified and framework is installed if (HttpContext.Request.Cookies[CookieRequestCultureProvider.DefaultCookieName] == null && !string.IsNullOrEmpty(_configuration.GetConnectionString("DefaultConnection"))) { - Uri uri = new Uri(Request.GetDisplayUrl()); + var uri = new Uri(Request.GetDisplayUrl()); var alias = _aliases.GetAlias(uri.Authority + "/" + uri.LocalPath.Substring(1)); _state.Alias = alias; - // set default language for site - var language = _languages.GetLanguages(alias.SiteId).Where(item => item.IsDefault).FirstOrDefault(); - if (language != null) + // set default language for site if the culture is not supported + var languages = _languages.GetLanguages(alias.SiteId); + if (languages.All(l => l.Code != CultureInfo.CurrentUICulture.Name)) { - HttpContext.Response.Cookies.Append( - CookieRequestCultureProvider.DefaultCookieName, - CookieRequestCultureProvider.MakeCookieValue( - new RequestCulture(language.Code))); + var defaultLanguage = languages.Where(l => l.IsDefault).SingleOrDefault() ?? languages.First(); + + SetLocalizationCookie(defaultLanguage.Code); } else { - HttpContext.Response.Cookies.Append( - CookieRequestCultureProvider.DefaultCookieName, - CookieRequestCultureProvider.MakeCookieValue( - new RequestCulture(_configuration.GetSection("Localization").GetValue("DefaultCulture", Constants.DefaultCulture)))); + SetLocalizationCookie(_localizationManager.GetDefaultCulture()); } } } @@ -176,5 +180,12 @@ namespace Oqtane.Pages return ""; } } + + private void SetLocalizationCookie(string culture) + { + HttpContext.Response.Cookies.Append( + CookieRequestCultureProvider.DefaultCookieName, + CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture))); + } } }