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

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 zostały szczegółowo opisane tutaj.

Brakujące zasoby

Typowe przyczyny nieznajdowania zasobów to:

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

Wskazówka: 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 to nieprawidłowa cookie wartość, chociaż c=en-UK|uic=en-US jest prawidłowa.

Problemy z bibliotekami zasobów i 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ą:

  • Brak elementu ResourceLocationAttribute w bibliotece klas uniemożliwi ResourceManagerStringLocalizerFactory odnajdywanie zasobów.
  • Nazewnictwo plików zasobów. Aby uzyskać więcej informacji, zobacz sekcję Problemy z nazewnictwem plików zasobów.
  • Zmiana głównej przestrzeni nazw biblioteki klas. Aby uzyskać więcej informacji, zobacz sekcję Problemy z przestrzeń nazw głównych.

Element CustomRequestCultureProvider nie działa zgodnie z oczekiwaniami

Klasa RequestLocalizationOptions ma trzech domyślnych dostawców:

  1. QueryStringRequestCultureProvider
  2. CookieRequestCultureProvider
  3. AcceptLanguageHeaderRequestCultureProvider

Umożliwia CustomRequestCultureProvider dostosowanie sposobu, w jaki kultura lokalizacji jest udostępniana w aplikacji. Element CustomRequestCultureProvider jest używany, gdy domyślni dostawcy nie spełniają Twoich wymagań.

  • Typowym powodem, dla którego dostawca niestandardowy nie działa prawidłowo, jest to, że nie jest to pierwszy dostawca na RequestCultureProviders liście. Aby rozwiązać ten problem:

  • Wstaw dostawcę niestandardowego na pozycji 0 na RequestCultureProviders liście jako następujące:

options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
    {
        // My custom request culture logic
        return new ProviderCultureResult("en");
    }));
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
    {
        // My custom request culture logic
        return new ProviderCultureResult("en");
    }));
  • Użyj AddInitialRequestCultureProvider metody rozszerzenia, aby ustawić dostawcę niestandardowego jako dostawcę początkowego.

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 nazwy RootNamespace, która została szczegółowo opisana tutaj

Ostrzeżenie

Taka sytuacja może wystąpić, gdy nazwa projektu nie jest prawidłowym identyfikatorem platformy .NET. Na przykład my-project-name.csproj użyje głównej przestrzeni nazw my_project_name i nazwy my-project-name zestawu prowadzącego do 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. Powinny one być zasobem osadzonym, w przeciwnym razie ResourceStringLocalizer nie można odnaleźć tych zasobów.

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