mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Smart fallback on Browser culture
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
using System.Globalization;
|
||||
using System.Web;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Localization.Services;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user