Ř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ří:

CustomRequestCultureProvider nefunguje podle očekávání

Třída RequestLocalizationOptions má tři výchozí zprostředkovatele:

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");
        }));
    

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-namesestavení, 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).

Problémy GitHubu s užitečnými tipy pro řešení problémů