Rozwiązywanie problemów z lokalizacją ASP.NET Core

Autor: Hisham Bin Ateya

Ten artykuł zawiera instrukcje dotyczące diagnozowania problemów z lokalizacją aplikacji ASP.NET Core.

Problemy z konfiguracją lokalizacji

Kolejność oprogramowania pośredniczącego lokalizacji
Aplikacja może nie lokalizować, ponieważ oprogramowanie pośredniczące lokalizacji nie jest uporządkowane zgodnie z oczekiwaniami.

Aby rozwiązać ten problem, upewnij się, że oprogramowanie pośredniczące lokalizacji zostało zarejestrowane przed oprogramowaniem pośredniczącym MVC. W przeciwnym razie oprogramowanie pośredniczące lokalizacji nie jest stosowane.

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

    services.AddMvc();
}

Nie można odnaleźć ścieżki zasobów lokalizacji

Obsługiwane kultury w obiekcie RequestCultureProvider nie są zgodne z zarejestrowanymi raz

Problemy z nazewnictwem plików zasobów

ASP.NET Core ma wstępnie zdefiniowane reguły i wytyczne dotyczące nazewnictwa plików zasobów lokalizacji, które opisano w temacie Globalizacja i lokalizacja w ASP.NET Core.

Brakujące zasoby

Typowe przyczyny nieznajdowania zasobów to:

  • Nazwy zasobów są błędniepelowane w pliku zasobów XML platformy .NET (.resx) lub żądaniu lokalizatora.
  • Brak zasobu w pliku zasobów dla niektórych języków, ale istnieje w innych.
  • Jeśli nadal występują problemy, sprawdź komunikaty dziennika lokalizacji (zarejestrowane na Debug poziomie dziennika), aby uzyskać więcej informacji na temat brakujących zasobów.

Napiwek

W przypadku używania CookieRequestCultureProviderfunkcji sprawdź, czy pojedyncze cudzysłowy nie są używane z kulturami wewnątrz wartości lokalizacji cookie . Na przykład c='en-UK'|uic='en-US' jest nieprawidłową cookie wartością, chociaż c=en-UK|uic=en-US jest prawidłowa.

Problemy z zasobami i bibliotekami klas

ASP.NET Core domyślnie umożliwia bibliotekom klas znajdowanie plików zasobów za pomocą polecenia ResourceLocationAttribute.

Typowe problemy z bibliotekami klas obejmują:

CustomRequestCultureProvider nie działa zgodnie z oczekiwaniami

Klasa RequestLocalizationOptions ma trzech domyślnych dostawców:

Umożliwia CustomRequestCultureProvider dostosowanie sposobu zapewniania kultury lokalizacji. Element CustomRequestCultureProvider jest używany, gdy domyślni dostawcy nie spełniają Twoich wymagań.

Typowym powodem nieprawidłowego działania dostawcy niestandardowego jest to, że nie jest to pierwszy dostawca na RequestCultureProviders liście. Aby rozwiązać ten problem:

  • Wstaw dostawcę niestandardowego na pozycji zero na RequestCultureProviders liście:

    options.AddInitialRequestCultureProvider(
        new CustomRequestCultureProvider(async context =>
        {
            // My custom request culture logic
            return new ProviderCultureResult("en");
        }));
    
  • Wstaw dostawcę niestandardowego na pozycji zero na RequestCultureProviders liście:

    options.RequestCultureProviders.Insert(0, 
        new CustomRequestCultureProvider(async context =>
        {
            // My custom request culture logic
            return new ProviderCultureResult("en");
        }));
    

Problemy z przestrzeń nazw katalogu głównego

Gdy główna przestrzeń nazw zestawu różni się od nazwy zestawu, lokalizacja nie działa domyślnie. Aby uniknąć tego problemu, użyj atrybutu opisanego RootNamespace w temacie Globalizacja i lokalizacja w ASP.NET Core.

Ostrzeżenie

Główny problem z przestrzenią nazw może wystąpić, gdy nazwa projektu nie jest prawidłowym identyfikatorem platformy .NET. Na przykład my-project-name.csproj używa głównej przestrzeni nazw my_project_name i nazwy my-project-namezestawu , co powoduje wystąpienie tego błędu.

Zasoby i akcja kompilacji

Jeśli używasz plików zasobów do lokalizacji, ważne jest, aby miały one odpowiednią akcję kompilacji. Użyj zasobu osadzonego. W przeciwnym razie ResourceStringLocalizer nie można odnaleźć tych zasobów.

Zastępowanie lokalizacji przy użyciu okienka "Czujniki" w narzędziach deweloperskich

W przypadku używania przesłonięć lokalizacji przy użyciu okienka Czujniki w narzędziach deweloperskich Google Chrome lub Microsoft Edge język rezerwowy jest resetowany po wstępnieenderingu. Unikaj ustawiania języka przy użyciu okienka Czujniki podczas testowania. Ustaw język przy użyciu ustawień języka przeglądarki.

Aby uzyskać więcej informacji, zobacz Blazor Lokalizacja nie działa z InteractiveServer (dotnet/aspnetcore #53707).

Problemy z usługą GitHub z pomocnymi poradami dotyczącymi rozwiązywania problemów