Переводы не работают удаленно только в локальной среде - PullRequest
0 голосов
/ 17 февраля 2019

В моем браузере, который я запускаю из моего локального окружения, строки переводятся так, как должно.Когда я загружаю в Azure, он все еще работает.Однако, когда я переключаюсь на Edge (который я никогда не использую ни для чего, кроме загрузки FireFox), строки больше не переводятся.Я проверил у внешних пользователей широкий спектр браузеров, и, похоже, это не зависит от платформы.

У меня есть все переводы в глобальном файле, помещенном в корневой каталог, и у меня есть фиктивный файл, чтобы я мог внедрить егов представлениях и контроллерах, как предложено документами.Почему-то файл RESX, похоже, не найден, поэтому я поставил его на Всегда загружать .Тем не менее, никаких изменений в поведении не происходит.

Я не уверен, как его диагностировать дальше или файл RESX скомпилирован в DLL или загружен прямо на сервер и считан на лету.Можно ли как-то проверить, что файл "там"?

Мой конфиг такой:

public void ConfigureServices(IServiceCollection services)
{
  ...
  services.AddLocalization(a => a.ResourcesPath = "");

  services.Configure<RequestLocalizationOptions>(a =>
    {
      CultureInfo[] supportedCultures = {
        new CultureInfo("sv-SE"),
        new CultureInfo("se")
      };
      a.DefaultRequestCulture = new RequestCulture("se");
      a.SupportedCultures = supportedCultures;
      a.SupportedUICultures = supportedCultures;
    });
  ...
  services.AddMvc()
    .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  ...
  app.UseRequestLocalization();
  ...
  app.UseMvcWithDefaultRoute();
}

edit

Iзаметил, что он работает в Chrome, когда у меня есть эти строки.

RequestLocalizationOptions options = app.ApplicationServices
  .GetService<IOptions<RequestLocalizationOptions>>().Value;
app.UseRequestLocalization(options);

Он перестает работать, когда у меня есть такие.

  //RequestLocalizationOptions options = app.ApplicationServices
  //  .GetService<IOptions<RequestLocalizationOptions>>().Value;
  app.UseRequestLocalization();

В IE это не работает ни в одномслучай.

1 Ответ

0 голосов
/ 18 февраля 2019

Пару слов о конфигурации культуры.Я думаю, вы хотели указать только шведский язык, поэтому у вас есть строка кода

CultureInfo[] supportedCultures = {
    new CultureInfo("sv-SE"),
    new CultureInfo("se")
};

Оказывается, sv-SE определенно шведский культура, но se - Северные саамы культура.Если ваше намерение только шведский культура, вам нужно установить sv вместо se

CultureInfo[] supportedCultures = {
    new CultureInfo("sv-SE"),
    new CultureInfo("sv")
};
a.DefaultRequestCulture = new RequestCulture("sv");

Вернуться к главной проблеме.По умолчанию есть 3 способа установить культуру запроса, через строку запроса, куки или заголовок Accept-Language.Похоже, вы не указываете культуру в файлах cookie или строке запроса, но ваш браузер отправляет заголовок Accept-Language, из которого ASP.NET Core считывает культуру запроса.Если браузер отправляет культуры en-US, en и sv, ни один из них не соответствует supportedCultures (которые равны sv-SE и se), платформа возвращается к DefaultRequestCulture (то есть * 1026)*) и читает ресурсы с Lingo.se.resx и все нормально.Но похоже, что Edge (в любом другом браузере, кроме другого) отправил другой набор культур в заголовке Accept-Language, который включал sv-SE, содержащийся в supportedCultures.Поэтому программа чтения ресурсов искала файл Lingo.sv-se.resx или Lingo.sv.resx, но безуспешно, и поэтому перевод не был предоставлен.

Если мое предположение верно, изменив se на sv в вашем коде и переименовав Lingo.se.resx к Lingo.sv.resx исправит проблему.

...