Řešení ASP.NET Core lokalizace
Tento článek obsahuje pokyny k diagnostice problémů s ASP.NET Core lokalizací aplikací.
Problémy s konfigurací lokalizace
Pořadí middlewaru lokalizace
Aplikace se 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 před middlewarem MVC zaregistrovaný middleware pro lokalizaci. V opačném případě se middleware lokalizace použít nebude.
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc();
}
Cesta k prostředkům lokalizace se nenašla
Podporované jazykové verze v zprostředkovateli RequestCultureProvider se neshodují s jednou zaregistrovanou
Problémy s pojmenováním souborů prostředků
ASP.NET Core předdefinovaná pravidla a pokyny pro pojmenování souborů prostředků lokalizace, které jsou podrobně popsané tady.
Chybějící prostředky
Mezi běžné příčiny, kdy se prostředky nenašly, patří:
- Názvy prostředků jsou v souboru nebo v
resxpožadavku lokátoru chybně napsané. - Prostředek v pro některé jazyky chybí, ale
resxexistuje v jiných. - Pokud stále máte potíže, zkontrolujte zprávy protokolu lokalizace (které jsou na úrovni protokolu), kde najdete další podrobnosti o
Debugchybějících zdrojích.
Nápověda: Pokud používáte CookieRequestCultureProvider , ověřte, že se jednoduché uvozovky nepoužíly s jazykovou verzí uvnitř hodnoty cookie lokalizace. Například je c='en-UK'|uic='en-US' neplatná cookie hodnota, zatímco je c=en-UK|uic=en-US platná.
Problémy & s knihovnami tříd prostředků
ASP.NET Core výchozím nastavení poskytuje způsob, jak knihovnám tříd umožnit vyhledání souborů prostředků prostřednictvím atributu ResourceLocationAttribute.
Mezi běžné problémy s knihovnami tříd patří:
- Chybějící v
ResourceLocationAttributeknihovně tříd zabráníResourceManagerStringLocalizerFactoryve zjišťování prostředků. - Pojmenování souborů prostředků. Další informace najdete v části Problémy s pojmenováním souborů 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:
QueryStringRequestCultureProviderCookieRequestCultureProviderAcceptLanguageHeaderRequestCultureProvider
CustomRequestCultureProvider umožňuje přizpůsobit, jak se jazyková verze lokalizace poskytuje ve vaší aplikaci. Se CustomRequestCultureProvider používá, když výchozí poskytovatelé nesplňuje vaše požadavky.
Běžným důvodem, proč vlastní zprostředkovatel nefunguje správně, je to, že není prvním poskytovatelem v
RequestCultureProvidersseznamu. Řešení tohoto problému:Vložte vlastního zprostředkovatele na pozici 0
RequestCultureProvidersv seznamu následujícím způsobem:
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");
}));
- K
AddInitialRequestCultureProvidernastavení vlastního zprostředkovatele jako počátečního zprostředkovatele použijte metodu rozšíření.
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. Pokud se chcete tomuto problému vyhnout, použijte rootNamespace,který je podrobně popsaný tady.
Upozornění
K tomu může dojít v případě, že název projektu není platný identifikátor rozhraní .NET. Například bude používat kořenový obor názvů a my-project-name.csproj název sestavení vedoucí k této my_project_name my-project-name chybě.
Akce & sestavení
Pokud pro lokalizaci používáte soubory prostředků, je důležité, aby měly příslušnou akci sestavení. Měly by být vloženým zdrojem, jinak tyto prostředky ResourceStringLocalizer nemůže najít.