Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Note
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Warning
A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Készítette: Rick Anderson, Damien Bowden, Bart Calixto, Nadeem Afana és Hisham Bin Ateya
A többnyelvű webhely lehetővé teszi, hogy a webhely szélesebb közönséget érjen el. ASP.NET Core szolgáltatásokat és köztes szoftvereket biztosít a különböző nyelvekre és kultúrákra való honosításhoz.
A Blazor jelen cikkben szereplő útmutatást kiegészítő vagy felülíró honosítási útmutatásért tekintse meg a ASP.NET Alapvető Blazor globalizáció és honosítás című témakört.
Terms
- Globalizáció (G11N): Az alkalmazás létrehozásának folyamata különböző nyelveket és régiókat támogat. A rövidítés az első és az utolsó betűből, valamint a közöttük lévő betűk számából származik.
- Honosítás (L10N): Egy globalizált alkalmazás testreszabásának folyamata adott nyelvekhez és régiókhoz.
- Nemzetköziség (I18N): Mind a globalizáció, mind a honosítás.
- Kultúra: Nyelv és adott esetben régió.
- Semleges kultúra: Egy adott nyelvvel rendelkező, de régiót nem tartalmazó kultúra (például "en", "es").
- Specifikus kultúra: Adott nyelvvel és régióval rendelkező kultúra (például "en-US", "en-GB", "es-CL").
- Szülőkultúra: Egy adott kultúrát tartalmazó semleges kultúra (például az "en" a "en-US" és a "en-GB) szülőkultúrája.
- Helyi beállítás: A helyi beállítás ugyanaz, mint a kultúra.
Nyelv- és ország-/régiókódok
A kulturális név <language code>-<country/region code> formátuma, ahol <language code> azonosítja a nyelvet, és <country/region code> azonosítja a szubkultúrát. Például es-CL a spanyol (Chile), en-US az angol (Egyesült Államok) és en-AU az angol (Ausztrália) esetében.
Az RFC 4646 az ISO 639 kétbetűs kisbetűs kulturális kód és egy országhoz vagy régióhoz társított ISO 3166 kétbetűs nagybetűs szubkultúrakód kombinációja. További információért lásd System.Globalization.CultureInfo.
Alkalmazások honosítási feladatai
Az alkalmazások globalizálása és honosítása a következő feladatokat foglalja magában:
- Az ASP.NET Core-alkalmazás tartalmának honosíthatóvá tétele.
- Honosított erőforrások biztosítása az alkalmazás által támogatott kultúrákhoz
- Stratégia implementálása az egyes kérések kultúrájának kiválasztásához
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
További erőforrások
- Az URL-kultúra szolgáltatója köztes szoftvereket használ szűrőkként a ASP.NET Core-ban
- A RouteDataRequest CultureProvider globális alkalmazása köztes szoftverekkel szűrőkként
-
IStringLocalizer: Használja a ResourceManager és a ResourceReader a kultúraspecifikus erőforrások biztosítására futási időben. Az interfész rendelkezik egy indexelővel és egy modulIEnumerablea lokalizált sztringek visszaadására. -
IHtmlLocalizer: HTML-t tartalmazó erőforrások esetén. - Megtekintés és adatannotációk
- A ASP.NET Core honosításának hibaelhárítása
- .NET-alkalmazások globalizálása és honosítása
- erőforrások .resx fájlokban
- Honosítás & Általános
Készítette: Rick Anderson, Damien Bowden, Bart Calixto, Nadeem Afana és Hisham Bin Ateya
A többnyelvű webhely lehetővé teszi, hogy a webhely szélesebb közönséget érjen el. ASP.NET Core szolgáltatásokat és köztes szoftvereket biztosít a különböző nyelvekre és kultúrákra való honosításhoz.
Terms
- Globalizáció (G11N): Az alkalmazás létrehozásának folyamata különböző nyelveket és régiókat támogat. A rövidítés az első és az utolsó betűből, valamint a közöttük lévő betűk számából származik.
- Honosítás (L10N): Egy globalizált alkalmazás testreszabásának folyamata adott nyelvekhez és régiókhoz.
- Nemzetköziség (I18N): Mind a globalizáció, mind a honosítás.
- Kultúra: Nyelv és adott esetben régió.
- Semleges kultúra: Egy adott nyelvvel rendelkező, de régiót nem tartalmazó kultúra (például "en", "es").
- Specifikus kultúra: Adott nyelvvel és régióval rendelkező kultúra (például "en-US", "en-GB", "es-CL").
- Szülőkultúra: Egy adott kultúrát tartalmazó semleges kultúra (például az "en" a "en-US" és a "en-GB) szülőkultúrája.
- Helyi beállítás: A helyi beállítás ugyanaz, mint a kultúra.
Nyelv- és ország-/régiókódok
A kulturális név <language code>-<country/region code> formátuma, ahol <language code> azonosítja a nyelvet, és <country/region code> azonosítja a szubkultúrát. Például es-CL a spanyol (Chile), en-US az angol (Egyesült Államok) és en-AU az angol (Ausztrália) esetében.
Az RFC 4646 az ISO 639 kétbetűs kisbetűs kulturális kód és egy országhoz vagy régióhoz társított ISO 3166 kétbetűs nagybetűs szubkultúrakód kombinációja. További információért lásd System.Globalization.CultureInfo.
Alkalmazások honosítási feladatai
Az alkalmazások globalizálása és honosítása a következő feladatokat foglalja magában:
- Az ASP.NET Core-alkalmazás tartalmának honosíthatóvá tétele.
- Honosított erőforrások biztosítása az alkalmazás által támogatott kultúrákhoz
- Stratégia implementálása az egyes kérések kultúrájának kiválasztásához
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
További erőforrások
- ASP.NET Core-alkalmazás tartalmának honosíthatóvá tétele
- Honosított erőforrások biztosítása nyelvekhez és kultúrákhoz egy ASP.NET Core-alkalmazásban
- Stratégiák a nyelv és a kultúra kiválasztásához egy honosított ASP.NET Core-alkalmazásban
- A ASP.NET Core honosításának hibaelhárítása
- .NET-alkalmazások globalizálása és honosítása
- A cikkben használt Localization.StarterWeb projekt.
- erőforrások .resx fájlokban
- Honosítás & Általános
Készítette: Rick Anderson, Damien Bowden, Bart Calixto, Nadeem Afana és Hisham Bin Ateya
A többnyelvű webhely lehetővé teszi, hogy a webhely szélesebb közönséget érjen el. ASP.NET Core szolgáltatásokat és köztes szoftvereket biztosít a különböző nyelvekre és kultúrákra való honosításhoz.
A nemzetköziesítés magában foglalja a System.Globalization és a honosítást. A globalizáció a különböző kultúrákat támogató alkalmazások tervezésének folyamata. A globalizáció támogatja az adott földrajzi területekhez kapcsolódó, meghatározott nyelvi szkriptek bevitelét, megjelenítését és kimenetét.
A honosítás egy globalizált alkalmazásnak a honosíthatóság érdekében már feldolgozott, adott kultúrához/területi beállításokhoz való igazításának folyamata. További információ: Globalizáció és honosítási kifejezések a dokumentum végén.
Az alkalmazás honosítása a következőket foglalja magában:
- Az alkalmazás tartalmának honosíthatóvá tétele
- Honosított erőforrások biztosítása a támogatott nyelvekhez és kultúrákhoz
- Stratégia megvalósítása az egyes kérések nyelvének/kultúrájának kiválasztásához
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
Az alkalmazás tartalmának honosíthatóvá tétele
IStringLocalizer és IStringLocalizer<T> a honosított alkalmazások fejlesztésekor a termelékenység javítása érdekében lettek kialakítva.
IStringLocalizer a ResourceManager és ResourceReader használatával biztosít kultúraspecifikus erőforrásokat futásidőben. Az interfész rendelkezik egy indexelővel és egy modul IEnumerable a lokalizált sztringek visszaadására.
IStringLocalizer nincs szükség az alapértelmezett nyelvi sztringek erőforrásfájlban való tárolására. Honosításra szánt alkalmazást fejleszthet, és a fejlesztés korai szakaszában nem kell erőforrásfájlokat létrehoznia. Az alábbi kód bemutatja, hogyan illessze be az "About Title" sztringet a honosításhoz.
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Localization;
namespace Localization.Controllers
{
[Route("api/[controller]")]
public class AboutController : Controller
{
private readonly IStringLocalizer<AboutController> _localizer;
public AboutController(IStringLocalizer<AboutController> localizer)
{
_localizer = localizer;
}
[HttpGet]
public string Get()
{
return _localizer["About Title"];
}
}
}
Az előző kódban a IStringLocalizer<T> megvalósítás függőséginjektálásból származik. Ha az "About Title" lokalizált értéke nem található, akkor a rendszer visszaadja az indexelő kulcsot, vagyis az "About Title" sztringet. Az alapértelmezett nyelvi literális sztringeket hagyhatja az alkalmazásban, és becsomagolhatja őket a honosítóba, hogy az alkalmazás fejlesztésére összpontosíthasson. Az alkalmazást az alapértelmezett nyelvvel fejlesztheti, és előkészítheti a honosítási lépésre anélkül, hogy először létrehoz egy alapértelmezett erőforrásfájlt. Másik lehetőségként használhatja a hagyományos megközelítést, és megadhat egy kulcsot az alapértelmezett nyelvi sztring lekéréséhez. Sok fejlesztő számára az új munkafolyamat, amely során nincs szükség alapértelmezett nyelvi .resx fájlra, és egyszerűen becsomagolják a karakterláncokat, csökkentheti az alkalmazások honosításának többletterhelését. Más fejlesztők a hagyományos munkafolyamatot részesítik előnyben, mivel így egyszerűbben dolgozhatnak hosszabb sztringkonstansokkal, és egyszerűbbé tehetik a honosított sztringek frissítését.
Használja a IHtmlLocalizer<T> implementációt azokhoz az erőforrásokhoz, amelyek HTML-t tartalmaznak.
IHtmlLocalizer A HTML az erőforrás-sztringben formázott argumentumokat kódolja, de magát az erőforrás-sztringet nem HTML-kódolja. Az alábbi példában csak a paraméter értéke name html kódolású.
using System;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Localization;
namespace Localization.Controllers
{
public class BookController : Controller
{
private readonly IHtmlLocalizer<BookController> _localizer;
public BookController(IHtmlLocalizer<BookController> localizer)
{
_localizer = localizer;
}
public IActionResult Hello(string name)
{
ViewData["Message"] = _localizer["<b>Hello</b><i> {0}</i>", name];
return View();
}
Note
Általában csak a szöveget honosítja, a HTML-t nem.
A legalacsonyabb szinten ki lehet jutni IStringLocalizerFactory a függőséginjektálásból:
{
public class TestController : Controller
{
private readonly IStringLocalizer _localizer;
private readonly IStringLocalizer _localizer2;
public TestController(IStringLocalizerFactory factory)
{
var type = typeof(SharedResource);
var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName);
_localizer = factory.Create(type);
_localizer2 = factory.Create("SharedResource", assemblyName.Name);
}
public IActionResult About()
{
ViewData["Message"] = _localizer["Your application description page."]
+ " loc 2: " + _localizer2["Your application description page."];
A fenti kód a két gyár létrehozási metódusát mutatja be.
A honosított sztringeket particionálhatja vezérlő, terület vagy egyetlen tároló alapján. A mintaalkalmazásban a rendszer egy névvel ellátott SharedResource próbaosztályt használ a megosztott erőforrásokhoz.
// Dummy class to group shared resources
namespace Localization
{
public class SharedResource
{
}
}
Egyes fejlesztők a Startup osztályt globális vagy megosztott sztringek tárolására használják. Az alábbi mintában a rendszer a InfoController honosítókat és a SharedResource honosítókat használja:
public class InfoController : Controller
{
private readonly IStringLocalizer<InfoController> _localizer;
private readonly IStringLocalizer<SharedResource> _sharedLocalizer;
public InfoController(IStringLocalizer<InfoController> localizer,
IStringLocalizer<SharedResource> sharedLocalizer)
{
_localizer = localizer;
_sharedLocalizer = sharedLocalizer;
}
public string TestLoc()
{
string msg = "Shared resx: " + _sharedLocalizer["Hello!"] +
" Info resx " + _localizer["Hello!"];
return msg;
}
Honosítás megtekintése
A IViewLocalizer szolgáltatás honosított karakterláncokat biztosít egy nézethez. Az ViewLocalizer osztály implementálja ezt a felületet, és megkeresi az erőforrás helyét a nézetfájl elérési útján. Az alábbi kód bemutatja, hogyan használhatja a következő alapértelmezett implementációt IViewLocalizer:
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@{
ViewData["Title"] = Localizer["About"];
}
<h2>@ViewData["Title"].</h2>
<h3>@ViewData["Message"]</h3>
<p>@Localizer["Use this area to provide additional information."]</p>
Az alapértelmezett implementáció megkeresi az erőforrásfájlt IViewLocalizer a nézet fájlneve alapján. Nincs lehetőség globális megosztott erőforrásfájl használatára.
ViewLocalizer implementálja a honosítót IHtmlLocalizer használva, így Razor nem kódolja HTML-be a lokalizált sztringet. Paraméterezheti az erőforrás-sztringeket, és IViewLocalizer HTML-kódolja a paramétereket, de az erőforrás-sztringet nem. Vegye figyelembe a következő Razor jelölést:
@Localizer["<i>Hello</i> <b>{0}!</b>", UserManager.GetUserName(User)]
Egy francia erőforrásfájl a következőket tartalmazhatja:
| Key | Value |
|---|---|
<i>Hello</i> <b>{0}!</b> |
<i>Bonjour</i> <b>{0} !</b> |
A renderelt nézet az erőforrásfájlból származó HTML-jelölőnyelvet tartalmazná.
Note
Általában csak a szöveget honosítja, a HTML-t nem.
Ha megosztott erőforrásfájlt szeretne használni egy nézetben, szúrja be IHtmlLocalizer<T>a következőt:
@using Microsoft.AspNetCore.Mvc.Localization
@using Localization.Services
@inject IViewLocalizer Localizer
@inject IHtmlLocalizer<SharedResource> SharedLocalizer
@{
ViewData["Title"] = Localizer["About"];
}
<h2>@ViewData["Title"].</h2>
<h1>@SharedLocalizer["Hello!"]</h1>
DataAnnotations honosítás
A DataAnnotations hibaüzeneteket a IStringLocalizer<T> használatával honosítjuk. A ResourcesPath = "Resources" beállítás használatával a RegisterViewModel hibaüzenetek az alábbi elérési utak egyikében tárolhatók:
- Resources/ViewModels.Account.RegisterViewModel.fr.resx
- Resources/ViewModels/Account/RegisterViewModel.fr.resx
public class RegisterViewModel
{
[Required(ErrorMessage = "The Email field is required.")]
[EmailAddress(ErrorMessage = "The Email field is not a valid email address.")]
[Display(Name = "Email")]
public string Email { get; set; }
[Required(ErrorMessage = "The Password field is required.")]
[StringLength(8, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
A nem érvényesítési attribútumok lokalizálva vannak.
Egy erőforrás-sztring használata több osztályhoz
Az alábbi kód bemutatja, hogyan használható egy erőforrás-sztring több osztályhoz tartozó érvényesítési attribútumokhoz:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddDataAnnotationsLocalization(options => {
options.DataAnnotationLocalizerProvider = (type, factory) =>
factory.Create(typeof(SharedResource));
});
}
Az előző kódban a SharedResource osztály felel meg a resx fájlnak, amelyben az érvényesítési üzeneteket tárolják. Ezzel a megközelítéssel a DataAnnotations csak a SharedResource elemet fogja használni, az egyes osztályokhoz tartozó erőforrás helyett.
Honosított erőforrások biztosítása a támogatott nyelvekhez és kultúrákhoz
Támogatott kultúrák és támogatott UI kultúrák
ASP.NET Core két kulturális érték megadását teszi lehetővé. SupportedCulturesSupportedUICultures A CultureInfo objektum SupportedCultures határozza meg a kulturális környezettől függő függvények, mint például a dátum-, idő-, szám- és pénznemformázás eredményeit.
SupportedCultures emellett meghatározza a szöveg, a burkolati konvenciók és a sztring-összehasonlítások rendezési sorrendjét is. További információ arról, hogy a kiszolgáló hogyan azonosítja a kultúrát, lásd CultureInfo.CurrentCulture és CultureInfo.CurrentUICulture. Ez SupportedUICultures határozza meg, hogy mely lefordított karaktersorokat (fájlokból .resx) keres a(z) ResourceManager. A ResourceManager megkeresi a kultúraspecifikus sztringeket, amelyeket a CurrentUICulture határoz meg. A .NET-ben minden szál rendelkezik CurrentCulture és CurrentUICulture objektumokkal. A keretrendszer ezeket az értékeket a kultúrafüggő függvények megjelenítésekor vizsgálja meg. Ha az aktuális szál kulturális beállítása en-US (angol, Egyesült Államok) értékre van állítva, akkor megjelenik DateTime.Now.ToLongDateString(); de ha Thursday, February 18, 2016CurrentCulture (spanyol, Spanyolország) értékre van állítva, akkor a kimenet es-ES.
Erőforrásfájlok
Az erőforrásfájl hasznos mechanizmus a honosítható sztringek kódtól való elválasztására. A nem alapértelmezett nyelv lefordított sztringjei el vannak különítve a .resx erőforrásfájlokban. Létrehozhat például egy welcome.es.resx nevű spanyol erőforrásfájlt, amely lefordított sztringeket tartalmaz. Az "es" a spanyol nyelv kódja. Az erőforrásfájl létrehozása a Visual Studióban:
A Megoldáskezelőben kattintson a jobb gombbal arra a mappára, amely az>hozzáadása> erőforrásfájlt tartalmazza.
A Telepített sablonok keresése mezőbe írja be az "erőforrás" kifejezést, és adja meg a fájl nevét.
Adja meg a kulcs értékét (natív sztring) a Név oszlopban, a lefordított sztringet pedig az Érték oszlopban.
A Visual Studio megjeleníti a Welcome.es.resx fájlt.
Erőforrásfájl elnevezése
Az erőforrások neve az osztályuk teljes típusneve, az összeállítás neve nélkül. Például egy projektben a francia erőforrás, amelynek fő szerelvénye LocalizationWebsite.Web.dll az osztály LocalizationWebsite.Web.Startup számára, Startup.fr.resx néven szerepel. Az osztály LocalizationWebsite.Web.Controllers.HomeController erőforrásának neve Controllers.HomeController.fr.resx. Ha a megcélzott osztály névtere nem egyezik meg a szerelvény nevével, akkor a teljes típusnévre lesz szüksége. A mintaprojektben például a típus ExtraNamespace.Tools erőforrásának neve ExtraNamespace.Tools.fr.resx lesz.
A mintaprojektben a ConfigureServices metódus az "Erőforrások" értékre állítja az ResourcesPath értéket, így az otthoni vezérlő francia erőforrásfájljának projekt relatív elérési útja az Resources/Controllers.HomeController.fr.resx. Másik lehetőségként mappák használatával is rendszerezheti az erőforrásfájlokat. Az otthoni vezérlő esetében az elérési út az Erőforrások/Vezérlők/HomeController.fr.resx lesz. Ha nem használja ezt a ResourcesPath lehetőséget, a .resx fájl a projekt alapkönyvtárába kerül. Az erőforrásfájl neve HomeControllerControllers.HomeController.fr.resx lesz. A pont- vagy elérésiút-elnevezési konvenció használata attól függ, hogyan szeretné rendszerezni az erőforrásfájlokat.
| Erőforrás neve | Pont vagy elérési út elnevezése |
|---|---|
| Resources/Controllers.HomeController.fr.resx | Dot |
| Resources/Controllers/HomeController.fr.resx | Path |
Az @inject IViewLocalizer nézetekben használt Razor erőforrásfájlok hasonló mintát követnek. A nézet erőforrásfájlja pontelnevezéssel vagy elérési út elnevezéssel nevezhető el.
Razor az erőforrásfájlok útvonala utánozza a társított nézetfájl elérési útját. Feltételezve, hogy az ResourcesPath "Erőforrások" értéket állítjuk be, a nézethez Views/Home/About.cshtml társított francia erőforrásfájl a következők egyike lehet:
Erőforrások/Nézetek/Home/About.fr.resx
Erőforrások/nézetek.Home. About.fr.resx
Ha nem használja a ResourcesPath beállítást, a nézet .resx fájlja ugyanabban a mappában található, mint a nézet.
RootNamespaceAttribute
Az RootNamespaceAttribute attribútum egy szerelvény gyökérnévterét adja meg, ha egy szerelvény gyökérnévtere eltér a szerelvény nevével.
Warning
Ez akkor fordulhat elő, ha egy projekt neve nem érvényes .NET-azonosító. Például my-project-name.csproj a gyökérnévteret my_project_name és a hibahoz vezető szerelvénynevet my-project-name fogja használni.
Ha egy összeállítás gyökérnévtere eltér az összeállítás nevétől:
- A honosítás alapértelmezés szerint nem működik.
- A honosítás kudarcot vall az erőforrások összeállításon belüli keresésének módja miatt.
RootNamespaceolyan buildelési időérték, amely nem érhető el a végrehajtási folyamat számára.
Ha az RootNamespace érték eltér az AssemblyNameértéktől, adja meg a következőket AssemblyInfo.cs (a paraméterértékeket a tényleges értékekkel helyettesítve):
using System.Reflection;
using Microsoft.Extensions.Localization;
[assembly: ResourceLocation("Resource Folder Name")]
[assembly: RootNamespace("App Root Namespace")]
Az előző kód lehetővé teszi a resx fájlok sikeres feloldását.
Kultúra visszaesési viselkedés
Erőforrás keresésekor a honosítás a "kulturális tartalék" kifejezést használja. A kért kultúrától kezdve, ha nem található, visszaáll az adott kultúra szülőkultúrájára. Érdekességképpen a CultureInfo.Parent tulajdonság a szülőkultúrát jelképezi. Ez általában (de nem mindig) azt jelenti, hogy eltávolítja a nemzeti jelzőt az ISO-ból. A például Mexikóban beszélt spanyol nyelvjárás "es-MX". Az előtag "es" — spanyol, nem specifikus egyetlen országra sem.
Képzelje el, hogy webhelye kérést kap egy "Üdvözlő" forrásra a "fr-CA" kultúra használatával. A honosítási rendszer sorrendben a következő erőforrásokat keresi, és kiválasztja az első egyezést:
- Welcome.fr-CA.resx
- Welcome.fr.resx
-
Welcome.resx (ha a
NeutralResourcesLanguage"fr-CA")
Például, ha eltávolítja a ".fr" kultúra jelölőt, és a kultúra franciára van állítva, az alapértelmezett erőforrásfájl kerül beolvasásra, és a sztringek honosítva lesznek. A Resource Manager egy alapértelmezett vagy tartalék erőforrást jelöl ki, ha semmi sem felel meg a kért kultúrának. Ha csak akkor szeretné visszaadni a kulcsot, ha hiányzik egy erőforrás a kért kultúrához, akkor nem szabad alapértelmezett erőforrásfájllal rendelkeznie.
Erőforrásfájlok létrehozása a Visual Studióval
Ha olyan erőforrásfájlt hoz létre a Visual Studióban, amely nem tartalmaz kulturális környezetet a fájlnévben (például Welcome.resx), a Visual Studio létrehoz egy C#-osztályt, amely minden sztringhez rendelkezik tulajdonsággal. Általában nem ezt szeretné ASP.NET Core-val. Általában nem rendelkezik alapértelmezett .resx erőforrásfájllal (.resx fájl a kultúra neve nélkül). Javasoljuk, hogy hozza létre a .resx fájlt egy kulturális névvel (például Welcome.fr.resx). Amikor kulturális névvel rendelkező .resx fájlt hoz létre, a Visual Studio nem hozza létre az osztályfájlt.
Más kultúrák hozzáadása
Minden nyelv és kultúra kombinációhoz (az alapértelmezett nyelven kívül) egyedi erőforrásfájlra van szükség. A különböző kultúrák és területi beállítások erőforrásfájljait úgy hozhatja létre, hogy új erőforrásfájlokat hoz létre, amelyekben az ISO-nyelvkódok a fájlnév részét képezik (például en-us, fr-caés en-gb). Ezek az ISO-kódok a fájlnév és a .resx fájlkiterjesztés között vannak elhelyezve, mint a Welcome.es-MX.resx (spanyol/mexikói).
Stratégia megvalósítása az egyes kérések nyelvének/kultúrájának kiválasztásához
Honosítás konfigurálása
A honosítás a metódusban Startup.ConfigureServices van konfigurálva:
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
AddLocalizationhozzáadja a honosítási szolgáltatásokat a szolgáltatástárolóhoz. A fenti kód az erőforrások elérési útját is "Erőforrások" értékre állítja.AddViewLocalizationtámogatja a honosított nézetfájlokat. Ebben a mintanézetben a honosítás a nézetfájl utótagján alapul. Például "fr" aIndex.fr.cshtmlfájlban.AddDataAnnotationsLocalizationaz absztrakciókon keresztül hozzáadja a támogatást a lokalizáltDataAnnotationsérvényesítési üzenetekhez.
Honosítási köztes szoftver
A kérések aktuális kultúrája a honosítási Köztes szoftverben van beállítva. A honosítási köztes szoftver engedélyezve van a Startup.Configure metódusban. A honosítási köztes szoftvereket minden olyan köztes szoftver előtt konfigurálni kell, app.UseMvcWithDefaultRoute()amely esetleg ellenőrzi a kéréskultúrát (például). A lokalizációs köztes szoftvernek az útvonaltervezési köztes szoftver után kell megjelennie, ha a RouteDataRequestCultureProvider-t használja. A köztes szoftver rendeléséről további információt a ASP.NET Core Middleware-ben talál.
var supportedCultures = new[] { "en-US", "fr" };
var localizationOptions = new RequestLocalizationOptions().SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
Ha szeretné, hogy a kódkommentárok angolon kívül más nyelvekre is le legyenek fordítva, jelezze nekünk a GitHub vitafórumkérdésénél.
UseRequestLocalization inicializál egy objektumot RequestLocalizationOptions . Minden kérésnél a RequestCultureProvider elemeit felsorolják, és az első olyan szolgáltatót használják, amelyik sikeresen meg tudja határozni a kérés kultúráját. Az alapértelmezett szolgáltatók az RequestLocalizationOptions osztályból származnak:
QueryStringRequestCultureProviderCookieRequestCultureProviderAcceptLanguageHeaderRequestCultureProvider
Az alapértelmezett lista a legspecifikusabbtól a legkevésbé specifikusig tart. A cikk későbbi részében látni fogjuk, hogyan módosíthatja a sorrendet, és hogyan adhat hozzá egyéni kulturális szolgáltatót is. Ha egyik szolgáltató sem tudja meghatározni a kérési kultúrát, a rendszer ezt DefaultRequestCulture használja.
QueryStringRequestCultureProvider
Egyes alkalmazások lekérdezési sztringet használnak a CultureInfobeállításhoz. A cookie vagy Accept-Language fejléces megközelítést használó alkalmazások esetében hasznos lehet egy lekérdezési lánc hozzáadása az URL-címhez a kód hibakereséséhez és teszteléséhez. Alapértelmezés szerint a rendszer az QueryStringRequestCultureProvider első honosítási szolgáltatóként van regisztrálva a RequestCultureProvider listában. Adja át a lekérdezési sztring paramétereit culture és ui-culture. Az alábbi példa az adott kultúrát (nyelvet és régiót) spanyol/mexikói értékre állítja:
http://localhost:5000/?culture=es-MX&ui-culture=es-MX
Ha csak a két (culture vagy ui-culture) közül az egyiket adja meg, a lekérdezési sztringszolgáltató mindkét értéket az átadott érték alapján állítja be. Például, ha csak a kultúrát állítja be, az beállítja mind a Culture, mind a UICulture.
http://localhost:5000/?culture=es-MX
CookieRequestCultureProvider
Az éles alkalmazások gyakran biztosítanak egy mechanizmust arra, hogy a kultúrát az ASP.NET Core kultúrával állítsuk be cookie.
MakeCookieValue A metódus használatával hozzon létre egy cookie.
A CookieRequestCultureProviderDefaultCookieName felhasználó által előnyben részesített kulturális adatok nyomon követéséhez használt alapértelmezett cookie nevet adja vissza. Az alapértelmezett cookie neve .AspNetCore.Culture.
A cookie formátum c=%LANGCODE%|uic=%LANGCODE%, ahol cCulture és uicUICulture, például:
c=en-UK|uic=en-US
Ha csak a kulturális adatok és a felhasználói felületi kultúra egyikét adja meg, a megadott kultúra mind a kulturális adatok, mind a felhasználói felületi kultúra esetében használatos lesz.
A Accept-Language HTTP-fejléc
A Accept-Language fejléc a legtöbb böngészőben beállítható, és eredetileg a felhasználó nyelvének megadására szolgál. Ez a beállítás azt jelzi, hogy a böngésző mit küldött vagy örökölt az alapul szolgáló operációs rendszertől. A böngészőkérelmek Accept-Language HTTP-fejléce nem tévedhetetlen módszer a felhasználó által előnyben részesített nyelv észlelésére (lásd: Nyelvi beállítások beállítása böngészőben). Az éles alkalmazásoknak tartalmazniuk kell egy módot arra, hogy a felhasználók testre szabhassák a választott kulturális környezetet.
A Accept-Language HTTP-fejléc beállítása az IE-ben
A fogaskerék ikonon koppintson az Internetbeállítások elemre.
Koppintson a Nyelvek elemre.
Koppintson a nyelvi beállítások elemre.
Koppintson a Nyelv hozzáadása elemre.
Adja hozzá a nyelvet.
Koppintson a nyelvre, majd a Feljebb gombra.
Egyéni szolgáltató használata
Tegyük fel, hogy lehetővé szeretné tenni az ügyfelek számára a nyelv és a kultúra tárolását az adatbázisokban. Létrehozhat egy szolgáltatót, amely megkeresi ezeket az értékeket a felhasználó számára. Az alábbi kód bemutatja, hogyan vehet fel egyéni szolgáltatót:
private const string enUSCulture = "en-US";
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[]
{
new CultureInfo(enUSCulture),
new CultureInfo("fr")
};
options.DefaultRequestCulture = new RequestCulture(culture: enUSCulture, uiCulture: enUSCulture);
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
{
// My custom request culture logic
return await Task.FromResult(new ProviderCultureResult("en"));
}));
});
Honosítási szolgáltatók hozzáadására vagy eltávolítására használható RequestLocalizationOptions .
Kérelemkultúra-szolgáltatók sorrendjének módosítása
RequestLocalizationOptions Három alapértelmezett kéréskultúra-szolgáltatóval rendelkezik: QueryStringRequestCultureProvider, CookieRequestCultureProviderés AcceptLanguageHeaderRequestCultureProvider. A [RequestLocalizationOptions.RequestCultureProviders]](xref:Microsoft.AspNetCore.Builder.RequestLocalizationOptions.RequestCultureProviders) tulajdonság használatával módosíthatja a szolgáltatók sorrendjét az alábbi módon:
app.UseRequestLocalization(options =>
{
var questStringCultureProvider = options.RequestCultureProviders[0];
options.RequestCultureProviders.RemoveAt(0);
options.RequestCultureProviders.Insert(1, questStringCultureProvider);
});
Az előző példában a QueryStringRequestCultureProvider és CookieRequestCultureProvider sorrendje meg van cserélve, így a RequestLocalizationMiddleware először a cookie-kból keresi ki a kultúrákat, majd a lekérdezési sztringből.
Ahogy korábban említettük, adjon hozzá egy egyéni szolgáltatót a AddInitialRequestCultureProvider segítségével, amely beállítja a sorrendet a 0-re, így ennek a szolgáltatónak prioritása van a többi fölött.
** A kultúra programozott módon történő beállítása
Ez a GitHubon található Localization.StarterWeb mintaprojekt felhasználói felületet tartalmaz a Culturebeállításhoz. A Views/Shared/_SelectLanguagePartial.cshtml fájl lehetővé teszi a kultúra kiválasztását a támogatott kultúrák listájából:
@using Microsoft.AspNetCore.Builder
@using Microsoft.AspNetCore.Http.Features
@using Microsoft.AspNetCore.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.Extensions.Options
@inject IViewLocalizer Localizer
@inject IOptions<RequestLocalizationOptions> LocOptions
@{
var requestCulture = Context.Features.Get<IRequestCultureFeature>();
var cultureItems = LocOptions.Value.SupportedUICultures
.Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
.ToList();
var returnUrl = string.IsNullOrEmpty(Context.Request.Path) ? "~/" : $"~{Context.Request.Path.Value}";
}
<div title="@Localizer["Request culture provider:"] @requestCulture?.Provider?.GetType().Name">
<form id="selectLanguage" asp-controller="Home"
asp-action="SetLanguage" asp-route-returnUrl="@returnUrl"
method="post" class="form-horizontal" role="form">
<label asp-for="@requestCulture.RequestCulture.UICulture.Name">@Localizer["Language:"]</label> <select name="culture"
onchange="this.form.submit();"
asp-for="@requestCulture.RequestCulture.UICulture.Name" asp-items="cultureItems">
</select>
</form>
</div>
A Views/Shared/_SelectLanguagePartial.cshtml fájl hozzá lesz adva az footer elrendezésfájl szakaszához, hogy minden nézet számára elérhető legyen:
<div class="container body-content" style="margin-top:60px">
@RenderBody()
<hr>
<footer>
<div class="row">
<div class="col-md-6">
<p>© @System.DateTime.Now.Year - Localization</p>
</div>
<div class="col-md-6 text-right">
@await Html.PartialAsync("_SelectLanguagePartial")
</div>
</div>
</footer>
</div>
A SetLanguage metódus beállítja a kultúrát cookie.
[HttpPost]
public IActionResult SetLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
);
return LocalRedirect(returnUrl);
}
Ehhez a projekthez nem csatlakoztathatja a _SelectLanguagePartial.cshtml mintakódot. A Localization.StarterWeb projekt a GitHubon kódot tartalmaz, amely átfolyatja a RequestLocalizationOptions a Razor a Függőséginjektálási tárolón keresztül.
Modellkötés útvonaladatai és lekérdezési sztringek
Lásd a modellkötés útvonaladatainak és a lekérdezési sztringeknek a globalizációs viselkedését.
Globalizációs és honosítási kifejezések
Az alkalmazás honosításának folyamata megköveteli a modern szoftverfejlesztésben gyakran használt releváns karakterkészletek alapszintű megértését és a hozzájuk kapcsolódó problémák megértését. Bár minden számítógép számként (kódként) tárolja a szöveget, a különböző rendszerek ugyanazt a szöveget különböző számok használatával tárolják. A honosítási folyamat az alkalmazás felhasználói felületének (UI) egy adott kultúrához/területi beállításhoz való fordítására vonatkozik.
A honosítás egy köztes folyamat annak ellenőrzéséhez, hogy egy globalizált alkalmazás készen áll-e a honosításra.
A kulturális név RFC 4646 formátuma az, hogy <languagecode2>-<country/regioncode2> a <languagecode2> nyelvi kód és <country/regioncode2> a szubkulturális kód. Például es-CL a spanyol (Chile), en-US az angol (Egyesült Államok) és en-AU az angol (Ausztrália) esetében.
Az RFC 4646 az ISO 639 kétbetűs kisbetűs kulturális kód és egy országhoz vagy régióhoz társított ISO 3166 kétbetűs nagybetűs szubkultúrakód kombinációja. További információért lásd System.Globalization.CultureInfo.
A nemzetközisítést gyakran "I18N"-ként rövidítjük. A rövidítés az első és az utolsó betűt, valamint a közöttük lévő betűk számát veszi fel, így a 18 az első "I" és az utolsó "N" közötti betűk számát jelenti. Ugyanez vonatkozik a globalizációra (G11N) és a honosításra (L10N).
Terms:
- Globalizáció (G11N): Az alkalmazás létrehozásának folyamata különböző nyelveket és régiókat támogat.
- Honosítás (L10N): Egy alkalmazás testreszabásának folyamata egy adott nyelvhez és régióhoz.
- Nemzetköziesítés (I18N): A globalizációt és a honosítást egyaránt ismerteti.
- Kultúra: Ez egy nyelv, és opcionálisan egy régió.
- Semleges kultúra: Egy adott nyelvvel rendelkező, de nem régióval rendelkező kultúra. (például "en", "es")
- Specifikus kultúra: Egy adott nyelvvel és régióval rendelkező kultúra. (például "en-US", "en-GB", "es-CL")
- Szülőkultúra: Egy adott kultúrát tartalmazó semleges kultúra. (például az "en" a "en-US" és a "en-GB" szülőkultúrája).
- Helyi beállítás: A helyi beállítás ugyanaz, mint a kultúra.
Note
Elképzelhető, hogy nem tud tizedesvesszőt beírni a tizedestizedes mezőkbe. Ha támogatni szeretné jQuery-érvényesítési olyan nem angol nyelvű területi beállításokhoz, amelyek vesszőt (",") használnak tizedesvesszőhöz, és nem US-English dátumformátumokat, lépéseket kell tennie az alkalmazás globalizálásához. A decimális vessző hozzáadására vonatkozó utasításokért tekintse meg a GitHub 4076-os megjegyzését.
Note
A ASP.NET Core 3.0-webalkalmazások kérésenként egy típusú LogLevel.Warning naplót írnak, ha a kért kultúra nem támogatott. Ha kérésenként egyet LogLevel.Warning naplóz, nagy méretű naplófájlokat hozhat létre redundáns információkkal. Ez a viselkedés megváltozott ASP.NET Core 3.0-ban. A RequestLocalizationMiddleware egy LogLevel.Debug típusú naplót ír, amely csökkenti a gyártási naplók méretét.