ASP.NET Core RequestLanguageProvidersC#

Место общения программистов C#
Ответить
Anonymous
 ASP.NET Core RequestLanguageProviders

Сообщение Anonymous »

Я хочу, чтобы моя Служба всегда работала в «de-ch», «it-ch» или «fr-ch».
Проблема в том, что я не могу гарантировать, что клиент всегда будет отправлять «-ch» на принимающем языке.
Установка этих трех поддерживаемых языков в RequestLocalizationOptions приведет к тому, что «fr» станет «de-ch» по умолчанию.
В настоящее время у меня установлен следующий порядок поставщиков культуры по умолчанию:
  • QueryStringRequestCultureProvider
  • CookieRequestCultureProvider
  • AcceptLanguageHeaderRequestCultureProvider
Поэтому, если культура передается через строку запроса, она имеет более высокий приоритет, чем принимаемый язык.
Чтобы достичь теперь максимальная гибкость и отображение всего, что я хочу "..-ch". Я написал собственный поставщик запросов. Я зарегистрировал его в конце этих трех, надеясь получить любой результат и сопоставить его с de-ch. Моя проблема в том, что я. понял, что это работает только с языком принятия. Нужно ли мне вручную создавать трех других поставщиков в моем пользовательском поставщике, проверять их результат в предпочтительном порядке, а затем сопоставлять его с «..-ch» или есть более простое решение?

Код: Выделить всё

  public class CustomSwissCultureProvider : RequestCultureProvider {
private static string defaultFallback = "de-ch";
public override async Task
 DetermineProviderCultureResult(HttpContext httpContext) {
// Let the other providers (QueryString, Cookie, Accept-Language) run first and get result of the last executed one:
var defaultCultureProvider = new AcceptLanguageHeaderRequestCultureProvider();
var result = await defaultCultureProvider.DetermineProviderCultureResult(httpContext);
if (result != null) {
// Apply the same mapping for UI Culture if needed
var culture = GetSwissCulture(result.Cultures.FirstOrDefault());
var uiCulture = GetSwissCulture(result.UICultures.FirstOrDefault());
// Return the updated ProviderCultureResult
return new ProviderCultureResult(culture, uiCulture);
}
return new ProviderCultureResult(defaultFallback, defaultFallback);
}

private static string? GetSwissCulture(StringSegment cultureSegment) {
string? culture = cultureSegment.HasValue ? cultureSegment.Value : null;
if (!string.IsNullOrEmpty(culture)) {
if (culture.Equals("de", StringComparison.OrdinalIgnoreCase)) {
return "de-CH";
}
else if (culture.Equals("fr", StringComparison.OrdinalIgnoreCase)) {
return "fr-CH";
}
else if (culture.Equals("it", StringComparison.OrdinalIgnoreCase)) {
return "it-CH";
}
}
return defaultFallback;
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... eproviders
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»