Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í lokalizačního middlewaru
Aplikace nemusí být lokalizována, protože middleware pro lokalizaci není správně seřazen.
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 verzemi
Problémy s pojmenováním souborů zdrojů
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.
Návod
Při použití CookieRequestCultureProvider ověřte, že se jednoduché uvozovky nepoužívají s kulturami 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 umožnit knihovnám tříd najít soubory prostředků prostřednictvím ResourceLocationAttribute.
Mezi běžné problémy s knihovnami tříd patří:
- V knihovně tříd chybí ResourceLocationAttribute, což brání ResourceManagerStringLocalizerFactory v objevení prostředků.
- Pojmenování souboru prostředků Další informace najdete v části Problémy s pojmenováním souboru prostředků .
- Změna kořenového jmenného prostoru 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
CustomRequestCultureProvider vám umožňuje přizpůsobit, jakým způsobem je poskytována kulturní 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.
Výstraha
K problému s názvem kořenového oboru může dojít, pokud název projektu není platným identifikátorem .NET. Například my-project-name.csproj používá kořenový obor názvů my_project_name a sestavení s názvem my-project-name, 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, jinak ResourceStringLocalizer nebude schopen tyto prostředky 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).