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)));
+ }
}
}