ASP.NET többnyelvű váltás alapvető MVC beépített funkciókkal

Oldal frissítve :
Oldal létrehozásának dátuma :

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.

image

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.

image

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.

image

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.

image

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.

image

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.

image

Írja be a lefordított szöveget a billentyűkkel ugyanabban az állapotban minden fájlhoz.

image

image

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.

image

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 érkezik a konstruktor. A SharedResource névnek meg kell egyeznie a korábban létrehozott osztály nevével. A szöveg átkerül a kapott honosító importőrének az erőforrásfájlba beírt kulcskarakterlánc átadásával. lehet letölteni. A szöveg nyelvét a kért kultúra alapján határozzák meg.

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 t. Ha leírod a következőképpen most, ez rendben van. A SharedResource névnek is meg kell egyeznie a korábban létrehozott erőforrásfájl és osztály nevével.

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...)

image

A ?culture=hu megadott minta. A megjelenítési nyelv az angol.

image

A ?culture=es. A megjelenítési nyelv spanyol.

image

A ?culture=ja.-hoz megadott minta. Eredetileg a SharedResource.ja.resx fájlt használja. A SharedResource.resx használatos, mert nem létezik.

image

Próbáljon meg megadni egy nem létező nyelvet. A SharedResource.resx fájl használatos, mert itt nincs megfelelő fájl.

image

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.

image

a spanyol megjelenítéséhez c=es|uic=es.

image

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.

image

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.

image

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.

image

Ö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.