Řešení potíží s lokalizací ASP.NET Core
Podle Hisham Bin Ateya
Tento článek obsahuje pokyny k diagnostice problémů s lokalizací aplikací ASP.NET Core.
Problémy s konfigurací lokalizace
Pořadí middlewaru lokalizace
Aplikace nemusí lokalizovat, protože middleware lokalizace není seřazený podle očekávání.
Pokud chcete tento problém vyřešit, ujistěte se, že je middleware lokalizace zaregistrovaný před middlewarem MVC. Jinak se nepoužije middleware lokalizace.
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc();
}
Cesta k lokalizačním prostředkům nebyla nalezena.
Podporované jazykové verze v RequestCultureProvider se neshodují s registrovanými jednou
Problémy s pojmenováním souborů prostředků
ASP.NET Core má předdefinovaná pravidla a pokyny pro pojmenování souborů lokalizačních prostředků, které jsou popsány v globalizaci a lokalizaci v ASP.NET Core.
Chybějící prostředky
Mezi běžné příčiny nenaleznutí prostředků patří:
- Názvy prostředků jsou chybně napsané v souboru prostředků .NET XML (
.resx
) nebo v požadavku lokalizátoru. - V souboru prostředků v některých jazycích chybí prostředek, ale existuje v jiných.
- Pokud stále máte potíže, projděte si zprávy protokolu lokalizace (zaprotokolované na
Debug
úrovni protokolu), kde najdete další podrobnosti o chybějících prostředcích.
Tip
Při použití CookieRequestCultureProviderověřte, že se jednoduché uvozovky nepoužívají s jazykovými verzemi uvnitř lokalizační cookie hodnoty. Například c='en-UK'|uic='en-US'
je neplatná cookie hodnota, pokud c=en-UK|uic=en-US
je platná.
Problémy s prostředky a knihovnami tříd
ASP.NET Core ve výchozím nastavení poskytuje způsob, jak knihovnám tříd umožnit najít soubory prostředků prostřednictvím ResourceLocationAttribute.
Mezi běžné problémy s knihovnami tříd patří:
- ResourceLocationAttribute Chybí v knihovně tříd, aby se nezjišťily ResourceManagerStringLocalizerFactory prostředky.
- Pojmenování souboru prostředků Další informace najdete v části Problémy s pojmenováním souboru prostředků.
- Změna kořenového oboru názvů knihovny tříd Další informace najdete v části Problémy s kořenovým oborem názvů.
CustomRequestCultureProvider
nefunguje podle očekávání
Třída RequestLocalizationOptions má tři výchozí zprostředkovatele:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
Umožňuje CustomRequestCultureProvider přizpůsobit způsob poskytnutí jazykové verze lokalizace. Použije se CustomRequestCultureProvider , když výchozí poskytovatelé nevyhovují vašim požadavkům.
Běžným důvodem, proč vlastní poskytovatel nefunguje správně, je to, že není prvním poskytovatelem v RequestCultureProviders seznamu. Řešení tohoto problému:
Vložte vlastního zprostředkovatele na pozici nula v RequestCultureProviders seznamu:
options.AddInitialRequestCultureProvider( new CustomRequestCultureProvider(async context => { // My custom request culture logic return new ProviderCultureResult("en"); }));
Vložte vlastního zprostředkovatele na pozici nula v RequestCultureProviders seznamu:
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context => { // My custom request culture logic return new ProviderCultureResult("en"); }));
- AddInitialRequestCultureProvider Pomocí metody rozšíření nastavte vlastního zprostředkovatele jako počátečního zprostředkovatele.
Problémy s kořenovým oborem názvů
Pokud se kořenový obor názvů sestavení liší od názvu sestavení, lokalizace ve výchozím nastavení nefunguje. Chcete-li se tomuto problému vyhnout, použijte RootNamespace
atribut, který je popsán v globalizaci a lokalizaci v ASP.NET Core.
Upozorňující
K problému s kořenovým oborem názvů může dojít v případě, že název projektu není platný identifikátor .NET. Například my-project-name.csproj
používá kořenový obor názvů my_project_name
a název my-project-name
sestavení, což vede k této chybě.
Prostředky a akce sestavení
Pokud k lokalizaci používáte soubory prostředků, je důležité, aby měly odpovídající akci sestavení. Použijte vložený prostředek, ResourceStringLocalizer
jinak tyto prostředky nemůžete najít.
Přepsání polohy pomocí podokna Senzory v vývojářských nástrojích
Při použití přepsání umístění pomocí podokna Senzory v Google Chrome nebo vývojářských nástrojích Microsoft Edge se po předběžném nastavení resetuje záložní jazyk. Při testování se vyhněte nastavení jazyka pomocí podokna Senzory . Nastavte jazyk pomocí nastavení jazyka prohlížeče.
Další informace naleznete v tématu Blazor Lokalizace nefunguje s InteractiveServer (dotnet/aspnetcore
#53707).