ASP.NET többnyelvű váltás alapvető MVC beépített funkciókkal
Környezet
- Vizuális stúdió
-
- Visual Studio 2019
- ASP.NET Core
-
- 3.0
- 3.1
Először
ASP.NET az MVC alapvető lokalizációs szolgáltatásaival válthat több nyelv között a megjelenítésükhöz.
Erőforrásfájl létrehozása lefordított szöveghez
Hozzon létre egy mappát a szöveget kezelő erőforrásfájlok (Resx) tárolására. A hely bárhol van, de hagyja közvetlenül az útvonal alatt. Ez az elérési út a későbbi beállításokra is hatással van.
Kattintson a jobb gombbal a projektre, és válassza a Hozzáadás vagy az Új mappa parancsot.
Hagyja meg a mappanév-erőforrásokat. Ezt a mappanevet önkényesen is beállíthatja, de ezt a mappanevet a későbbi beállításokban is megadhatja.
Ezután hozzon létre egy erőforrásfájlt, amely beírja a szöveget az egyes nyelvekhez.
Kattintson a jobb gombbal az Erőforrások mappára, és válassza a Hozzáadás vagy az Új elem parancsot.
Jelölje ki az erőforrásfájlt (.resx). A fájlnév tetszőleges lehet, de meg kell egyeznie a később megadott névvel. Most tegyük fel, hogy SharedResource.resx.
A .resx fájl létrehozása után kattintson duplán a megnyitásához, majd írja be a szöveget azonosító nevet és a ténylegesen megjeleníteni kívánt szöveget. A SharedResource.resx fájl az a fájl, amelyet akkor kell használni, ha a nyelv nem létezik. Japánul írtam be. Ha azt szeretné, hogy más nyelvek ( például az angol – legyen az alapértelmezett nyelv, adja meg őket ezen a nyelven.
Itt adjuk hello és goodbye mintaként. Ne feledje, hogy a kis- és nagybetűket nem veszi figyelembe.
Folytassa az erőforrásfájlok létrehozását más nyelvekhez. A nyelv azonosításához adja meg a fájl nevét, például SharedResource.<Kulturális kód>.resx. Az ISO 639 és az ISO 3166 egyik vagy mindkét kombinációját megadhatja a tenyészetkódhoz. A támogatási kód időről időre változhat, így a CultureInfo osztály a Microsoft webhelyén Kérjük, olvassa el az oldalt.
Ez alkalommal, en (angol) és es (spanyol) készülnek. A japán nem érhető el, mert ez az alapértelmezett.
Írja be a lefordított szöveget a billentyűkkel ugyanabban az állapotban minden fájlhoz.
Ezután egy olyan fájllal fog rendelkezni, amely csak az osztályokat határozza meg. Ezt az imént létrehozott erőforrásfájl nevével megegyező névvel hozza létre.
Valójában, én dont' gond mi a név -ból kód reszelő maga van mert ön egyetlen kell egyezik a név -ból osztály belső rész, de hagy ez ugyanaz azért ez könnyű -hoz ért. Nem számít, hol akarod megírni a kódot.
A névtér legyen a projekt gyökere, és hozzon létre egy üres osztályt.
namespace LocalizationText
{
// クラス名は作成した .resx のファイル名と同じにする必要がある
public class SharedResource { }
}
Minden program javítása
Startup.cs
Javítsd meg Startup.cs. Írja le a ConfigureServices metódust az alábbiak szerint:
Szolgáltatások. AddMvc(). Ha van AddViewLocalization metódus, akkor a nézet és a vezérlő oldal által lefordított szöveg Biztos vagyok benne, hogy meg tudom szerezni, de Ahogy az is a hivatalos honlapján szolgáltatások. Nincs probléma az AddLocalization metódus együttes hívásával.
Lehetőségek. A ResourcesPath annak a mappának az elérési útját adja meg, amelyben a Resx-fájl található. Ha mindkettő meg van adva, a szolgáltatások. AddMvc(). Az AddViewLocalization metódus élvez elsőbbséget.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
// Resx ファイルのあるフォルダを指定する。
// コントローラー側でしか使用しないならこちらでもよい。AddViewLocalization を使用するならこちらはなくても動作する。
//services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
// ローカライズに必要。Resx ファイルのフォルダパスを指定
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix, opts => { opts.ResourcesPath = "Resources"; });
}
Ezután módosítsa a konfigurálása metódust Startup.cs. Ha csak el szeretné olvasni az erőforrásfájlt, nincs rá szüksége. Az a kód, amely ahhoz szükséges, hogy a felhasználó önkényesen adja meg a nyelvet.
Alapkivitelben a Core MVC ASP.NET beépített funkciókat használjuk. A következő kód a felhasználó környezetétől függően ismerteti a "lekérdezési karakterlánc", a "cookie" és az "Accept-Language HTTP fejléc" kifejezést. Az egyikben válthat a megjelenítési nyelvek között. Később találkozunk, hogyan ellenőrizzük a tényleges műveletet.
A kapcsolható nyelv itt van megadva a tömbben (supportedCultures). A ja-t adtam meg alapértelmezett nyelvként, de ezúttal nem hoztam létre a ja fájlt. A SharedResource.resx akkor használatos, ha az en, es nyelvtől eltérő nyelv van megadva.
Elválaszthatja a felhasználói felületet a támogatott nyelvektől, de nem sok előnye van annak, ha elválasztja. Ugyanaz a nyelved.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
// 省略
}
// 標準の機能で切り替えたい言語を定義します。
var supportedCultures = new[]
{
new CultureInfo("ja"),
new CultureInfo("en"),
new CultureInfo("es"),
};
// 標準の言語切り替え機能を有効にします。対応しているのは「クエリ文字列」「Cookie」「Accept-Language HTTP ヘッダー」です。
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("ja"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
});
app.UseHttpsRedirection();
app.UseStaticFiles();
// 省略
}
Vezérlők\HomeController.cs
Controllers\HomeController.cs fájl.
Ahhoz, hogy egy honosított nyelvet a vezérlő oldalán, iStringLocalizer
By the way, amellett, hogy IStringLocalizer, van is egy IHtmlLocalizer, hogy lehet kapni HTML, ahogy van.
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IStringLocalizer<SharedResource> _localizer;
// DI でローカライザーを取得します。
public HomeController(ILogger<HomeController> logger, IStringLocalizer<SharedResource> localizer)
{
_logger = logger;
_localizer = localizer;
}
public IActionResult Index()
{
// ローカライザーを使用して設定されている言語のリソースファイルからテキストを取得します。
ViewData["Message"] = _localizer["Goodbye"];
return View();
}
// 省略
}
Nézetek\_ViewImports.cshtml
Views\_ViewImports.cshtml fájlt.
A nézet oldalán egy honosító használatához be kell adnia az
IHtmlLocalizer van a Microsoft.AspNetCore.Mvc.Localization névtér, így fogom meghatározni ezt a használatát.
Ha csak egy bizonyos ponton szeretné használni a honosítót, a következő kódot külön nézetfájlba is beillesztheti. Ha _ViewImports.cshtml fájlban írja, akkor automatikusan használhatja az összes nézetfájlban.
@using LocalizationText
@using LocalizationText.Models
@using Microsoft.AspNetCore.Mvc.Localization
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@* ビュー側でローカライザーを使用できるように定義します *@
@inject IHtmlLocalizer<SharedResource> Localizer
Nézetek\Kezdőlap\Index.cshtml
Views\Home\Index.cshtml fájl. A vezérlő oldalon kapott szöveg és a közvetlenül a nézet oldalon kapott szöveg jelenik meg. A nézetoldali honosító is lekéri a szöveget az indexelő kulcskarakterláncának megadásával.
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
@* ローカライザーから取得したテキストを表示します。 *@
<p>@Localizer["Hello"]</p>
<p>@ViewData["Message"]</p>
Ellenőrzés művelete
Lekérdezési karakterlánc
A megjelenítési nyelvet az URL lekérdezési karakterláncában megadva egy kulturális kód megadásával válthat. A formátum a ?culture=<culture kód>. Ha el szeretné választani a felhasználói felülettől, akkor az ?culture=<culture kód>>>&ui-culture=<culture kód> lesz.
Ha nem ad meg semmit: Ha nincs megadva, a SharedResource.resx lesz használva. (Valójában egy másik ítéletet is alkalmaztak...)
A ?culture=hu megadott minta. A megjelenítési nyelv az angol.
A ?culture=es. A megjelenítési nyelv spanyol.
A ?culture=ja.-hoz megadott minta. Eredetileg a SharedResource.ja.resx fájlt használja. A SharedResource.resx használatos, mert nem létezik.
Próbáljon meg megadni egy nem létező nyelvet. A SharedResource.resx fájl használatos, mert itt nincs megfelelő fájl.
Süti
A cookie-k válthatnak a megjelenítési nyelv között. Általában megjelent a szerver oldalon, de ezúttal megpróbálom regisztrálni a cookie-kat közvetlenül a böngésző funkció.
Mivel minden webböngészőrendelkezik fejlesztői eszközzel, a cookie-k regisztrálására használhatja. Az alábbi ábrán az F12 megnyomása az Edge-en a fejlesztői eszközök megjelenítéséhez.
A megfelelő cookie neve . AspNetCore.Culture, és a nyelvet megadott érték Írja be c=<culture kód>|uic=<culture kód> formában. A cookie-k esetében meg kell adnia az ui kódot is. Miután regisztrálta a cookie-t, frissítse a böngésző oldalát, hogy frissítse azt. A rendszer cookie-t küld a kiszolgálónak, hogy a kiszolgáló lekérje a megadott nyelvet.
Az alábbi ábrán megadhatja a c=en|uic=en értéket az angol megjelenítéséhez.
a spanyol megjelenítéséhez c=es|uic=es.
Elfogadási nyelv HTTP-fejléce
Az Accept-Language HTTP fejléc ellenőrzi a webböngészőtől a kiszolgálóhoz kért fejlécadatokat. Ez az a képesség, hogy váltani nyelvek kell.
A webböngésző beállításaiban bármilyen accept-language nyelvet elküldhet, de alapértelmezés szerint megfelelhet az operációs rendszer nyelvi beállításainak. Az accept-language elküldésre kerül. (Függetlenül attól, hogy ténylegesen küldött függ az operációs rendszer és a böngésző.) A nyelv inicializálása a webböngészőben az operációs rendszer nyelvéhez, de helyes lehet.)
Így például, ahogy az alábbi ábrán látható, megnyithatja a lapot az angol nyelvű operációs rendszer webböngészőjében, és elküldheti az en információkat, így automatikusan A SharedResource.en.resx be van jelölve az angol nyelv megjelenítéséhez.
Ha olyan nyelvet próbál megadni, amely nem létezik a lekérdezési karakterláncban, eredetileg a SharedResource.resx et kell használnia. Accept-Language jeleníti meg az angol, mert en létezik.
Ha a lája meg van adva a lekérdezési karakterláncban, a lekérdezési karakterlánc élvez elsőbbséget, és japán jelenik meg.
Összefoglaló
Itt megpróbáltam végrehajtani a többnyelvű váltást a legegyszerűbb módon. Ha a felhasználó környezetének megfelelő nyelvek között szeretne váltani, használja az Accept-Language HTTP fejlécet alapértelmezett megjelenítési nyelvként. Ha a felhasználó valamilyen nyelvet választ, célszerű cookie-kat hozzáadni, vagy hozzáadni (vagy közvetlenül beírni) a lekérdezési karakterláncot.