Smart fallback on Browser culture

This commit is contained in:
Nicholas Mayne
2014-08-18 23:08:37 +01:00
parent 4df81f80c3
commit 83c5bd6360
2 changed files with 19 additions and 7 deletions

View File

@@ -1,4 +1,3 @@
using System.Globalization;
using System.Web;
using Orchard.Environment.Extensions;
using Orchard.Localization.Services;

View File

@@ -1,8 +1,11 @@
using System;
using System.Globalization;
using System.Linq;
using System.Web;
using Orchard.Data;
using Orchard.Environment.Configuration;
using Orchard.Environment.Extensions;
using Orchard.Localization.Records;
using Orchard.Mvc;
using Orchard.Services;
@@ -10,6 +13,7 @@ namespace Orchard.Localization.Services {
[OrchardFeature("Orchard.Localization.CutlureSelector")]
public class DefaultCultureStorageProvider : ICultureStorageProvider {
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IRepository<CultureRecord> _cultureRepository;
private readonly IClock _clock;
private readonly ShellSettings _shellSettings;
@@ -17,9 +21,11 @@ namespace Orchard.Localization.Services {
private const int DefaultExpireTimeYear = 1;
public DefaultCultureStorageProvider(IHttpContextAccessor httpContextAccessor,
IRepository<CultureRecord> cultureRepository,
IClock clock,
ShellSettings shellSettings) {
_httpContextAccessor = httpContextAccessor;
_cultureRepository = cultureRepository;
_clock = clock;
_shellSettings = shellSettings;
}
@@ -62,14 +68,21 @@ namespace Orchard.Localization.Services {
if (userLanguages == null || userLanguages.Length == 0)
return null;
var language = userLanguages[0].ToLowerInvariant().Trim();
var cultures = (from culture in _cultureRepository.Table select culture.Culture).ToList();
try {
return CultureInfo.CreateSpecificCulture(language).Name;
}
catch (ArgumentException) {
return null;
foreach (var userLanguage in userLanguages) {
var language = userLanguage.Split(';')[0].Trim();
if (cultures.Contains(language, StringComparer.OrdinalIgnoreCase)) {
try {
return CultureInfo.CreateSpecificCulture(language).Name;
}
catch (ArgumentException) {
}
}
}
return null;
}
private string GetCookiePath(HttpContextBase httpContext) {