Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
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łędnie pisane w pliku zasobów XML platformy .NET (
.resx) albo w żą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
Debugpoziomie dziennika), 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 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ą:
- Brak elementu ResourceLocationAttribute w bibliotece klas uniemożliwia 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ę Główne problemy z przestrzenią nazw .
CustomRequestCultureProvider nie działa zgodnie z oczekiwaniami
Klasa RequestLocalizationOptions ma trzech domyślnych dostawców:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
CustomRequestCultureProvider umożliwia dostosowanie sposobu definiowania kultury lokalizacyjnej. 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"); }));
- AddInitialRequestCultureProvider Użyj metody rozszerzenia, aby ustawić dostawcę niestandardowego jako dostawcę początkowego.
Problemy z główną przestrzenią nazw
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 RootNamespacew temacie Globalizacja i lokalizacja w ASP.NET Core.
Ostrzeżenie
Problem z główną przestrzenią nazw może wystąpić, gdy nazwa projektu nie jest prawidłowym identyfikatorem .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, ponieważ w przeciwnym razie ResourceStringLocalizer nie będzie w stanie 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).