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 CookieRequestCultureProvider
funkcji 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żliwiResourceManagerStringLocalizerFactory
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:
QueryStringRequestCultureProvider
CookieRequestCultureProvider
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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla