ASP.NET večjezično preklapljanje z vgrajenimi funkcijami jedra MVC

Stran posodobljena :
Datum ustvarjanja strani :

Okolje

Vizualni Studio
  • Vizualni Studio 2019
ASP.NET jedro
  • 3,0
  • 3,1

Sprva

ASP.NET uporabo jedra MVC lokalizacije funkcije za preklop med več jezikov, da jih prikažete.

Ustvarjanje datoteke vira za prevedeno besedilo

Ustvarite mapo za shranjevanje datotek virov (Resx), ki upravljajo besedilo. Lokacija je kjerkoli, vendar jo pustite neposredno pod potjo. Ta pot vpliva tudi na poznejše nastavitve.

Z desno miškino tipko kliknite projekt in izberite Dodaj ali novo mapo.

image

Pustite mapo ime mape. To ime mape lahko tudi poljubno nastavite, vendar lahko to ime mape določite v kasnejših nastavitvah.

image

Nato ustvarite datoteko vira za vnos besedila za vsak jezik.

Z desno tipko miške kliknite mapo viri in izberite Dodaj ali nov element.

image

Izberite datoteko vira (. resx). Ime datoteke je lahko poljubno, vendar se mora ujemati z imenom, ki ga podate pozneje. Za zdaj, recimo SharedResource. resx.

image

Ko ustvarite datoteko. resx, jo dvokliknite, da jo odprete, in nato vnesite ime, ki identificira besedilo in besedilo, ki ga želite dejansko prikazati. Datoteka SharedResource. resx je datoteka, ki jo želite uporabiti, če jezik ne obstaja. V japonščini sem vstopil. Če želite, da so drugi jeziki, na primer angleščina, privzeti, jih vnesite v ta jezik.

Tukaj vstopamo hello in Goodbye kot vzorci. Upoštevajte, da je občutljiva na male črke.

image

Še naprej ustvarjajte datoteke virov za druge jezike. Če želite prepoznati jezik, določite ime datoteke, kot je Sharedresource. ≪ kulturo Code >. resx. Za šifro kulture lahko navedete eno ali obe kombinaciji ISO 639 in ISO 3166. Koda podpore se lahko občasno spremeni, zato razred Cultureinfo na Microsoftovem spletnem mestu Prosimo, glejte stran.

Ta čas, en (angleščina) in ES (španščina) so pripravljene. Japonščina ni na voljo, ker je privzeta.

image

Vnesite prevedeno besedilo s ključi v enakem stanju za vsako datoteko.

image

image

Nato boste imeli datoteko, ki definira samo razrede. To ustvarite z istim imenom kot datoteka vira, ki ste jo pravkar ustvarili.

V bistvu, ne briga me, kaj je ime kodne datoteke samo zato, ker imate samo, da se ujemajo z imenom razreda znotraj, vendar pusti enako, tako da je enostavno razumeti. Ni važno, kam želite napisati kodo.

image

Naredite imenski prostor koren projekta in ustvarite prazen razred.

namespace LocalizationText
{
  // クラス名は作成した .resx のファイル名と同じにする必要がある
  public class SharedResource { }
}

Popravite vsak program

Startup.cs

Pritrditi Startup.cs. Opišite metodo ConfigureServices na naslednji način:

Storitve. AddMvc (). Če obstaja metoda AddViewLocalization, je besedilo, ki ga prevede stran pogleda in stran krmilnika, Prepričan sem, da lahko dobim, ampak Kot je tudi na uradni spletni strani storitev. Je ne naloga s poklic AddLocalization metoda vkup.

Možnosti. ResourcesPath določa pot mape, kjer se nahaja datoteka Resx. Če sta navedena oba, storitve. AddMvc (). Metoda AddViewLocalization ima prednost.

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

Nato spremenite metodo Konfiguriraj za Startup.cs. Če želite samo prebrati datoteko vira, je ne potrebujete. Koda, ki je potrebna, da lahko uporabnik poljubno določi jezik.

Mi smo z uporabo funkcije, zgrajene v ASP.NET Core MVC kot standard. Ta koda opisuje "niz poizvedbe", "piškotek" in "Sprejmi-Language HTTP glavo", odvisno od uporabnikovega okolja. Med jeziki prikaza lahko preklapljate v enem od njih. Vidimo se kasneje, kako preveriti dejansko operacijo.

Preklopni jezik je določen tukaj v matriki (Supportedkulturah). Sem določil ja kot privzeti jezik, vendar nisem ustvaril ja datoteke tokrat. SharedResource. resx se uporablja, če je določen jezik, ki ni en, ES.

Uporabniški vmesnik lahko ločite od jezikov, ki jih podpirujete, vendar ni veliko koristi za ločevanje. Imaš isti jezik.

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();

  // 省略
}

Controllers\HomeController.cs

Controllers\homecontroller.cs datoteke. Da bi dobili lokaliziran jezik na strani upravljavca, je iStringLocalizer prejel v konstruktor. SharedResource mora imeti enako ime kot razred, ki ste ga ustvarili prej. Besedilo je posredovane uvozniku prejetega Localizer tako, da prenese niz ključev, ki je vnesen v datoteko vira. lahko pridobite. Jezik besedila se določi na podlagi zahtevane kulture.

Mimogrede, poleg IStringLocalizer, je tudi IHtmlLocalizer, da lahko dobite HTML, kot je.

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

  // 省略
}

Pogledi \ _ViewImports. cshtml

Pogledi \ _ViewImports. cshtml datoteke. Če želite uporabiti lokalizator na strani pogleda , morate injicirati IHtmlLocalizer. Če ga opišete, kot sledi za zdaj, je v redu. Tudi, SharedResource morati življati isto ime kot vir pila ter sloj vi zagnati krik in vik prej.

IHtmlLocalizer je v imenskem prostoru Microsoft. AspNetCore. MVC. localization, tako da bom to Definiraj kot uporabo.

Če želite uporabiti samo Localizer na določeni točki, lahko vključite naslednjo kodo v ločenem pogledu datoteke. Če pišete v datoteki _ViewImports. cshtml, jo boste samodejno lahko uporabljali v vseh datotekah s pogledom.

@using LocalizationText
@using LocalizationText.Models
@using Microsoft.AspNetCore.Mvc.Localization
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@* ビュー側でローカライザーを使用できるように定義します *@
@inject IHtmlLocalizer<SharedResource> Localizer

Views\Home\Index.cshtml

Views\home\index.cshtml datoteke. Besedilo, pridobljeno na strani krmilnika, in besedilo, pridobljeno neposredno na strani pogleda, sta prikazana. Localizer pogled strani tudi gets besedilo, ki ga določa ključ niz za Indexer.

@{
    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>

Preverite delovanje

Niz poizvedbe

Jezik prikaza lahko preklopite tako, da navedete šifro kulture v nizu poizvedbe URL-ja. Oblika je ? kultura = < šifra kulture >. Če želite ločiti od uporabniškega vmesnika, bo ? kultura = < šifra kulture > & UI-kultura = < šifra kulture >.

Če ničesar ne navedete: Če ni določeno, se uporabi SharedResource. resx. (V bistvu je bila uporabljena druga sodba...)

image

Vzorec, določen za ? kultura = en. Jezik prikaza je angleščina.

image

Vzorec, določen za ? kulturo = ES. Jezik prikaza je španščina.

image

Vzorec je določen za ? kultura = ja. Prvotno se uporablja datoteka SharedResource. ja. resx. SharedResource. resx se uporablja, ker ne obstaja.

image

Poskusite določiti jezik, ki ne obstaja. SharedResource. resx se uporablja, ker ni ustrezne datoteke tukaj.

image

Piškotke

Piškotki lahko preklopijo v jezik prikaza. Navadno založnik s pomočnik stran, šele to čas bolan ' začeti v register piškot naravnost v obrv opravilo.

Ker ima vsak spletni brskalnik orodje za razvijalce, ga uporabite za registriranje piškotkov. Na spodnji sliki lahko pritisnete F12 na Edge, da prikažete orodja za razvijalce.

Ime ustreznega piškotka je . AspNetCore. culture in vrednost, ki določa jezik, je Vpišite v obliki c = < šifra kulture > | UIC = < šifra kulture >. Za piškotke morate vnesti tudi kodo uporabniškega vmesnika. Ko ste registrirali piškotek, osvežite stran spletnega brskalnika, da jo osvežite. Piškotek je poslan na strežnik, tako da bo strežnik pridobil določen jezik.

Na spodnji sliki lahko vnesete c = en | UIC = en za prikaz angleščine.

image

Type c = ES | UIC = ES za prikaz španščine.

image

Naslov HTTP za Sprejmi jezik

Glava HTTP Sprejmi-Language preverja podatke o glavi, ki jih zahteva spletni brskalnik, v strežnik. To je sposobnost, da preklopite jezike ustrezno.

V nastavitvah spletnega brskalnika lahko pošljete kateri koli Sprejmi-jezik, vendar se privzeto lahko ujemajo z nastavitvami jezika OS. Sprejmi-Language je zdaj poslan. (Ali je dejansko poslana je odvisna od OS in spletni brskalnik.) Jezik je inicializiran v spletnem brskalniku za jezik operacijskega sistema, vendar je morda pravilna.)

Tako, na primer, kot je prikazano na spodnji sliki, lahko odprete stran v spletnem brskalniku v angleškem jeziku OS in pošljete informacije, tako da lahko samodejno SharedResource. en. resx je izbran za prikaz angleščine.

image

Če poskušate določiti jezik, ki ne obstaja v nizu poizvedbe, morate prvotno uporabiti SharedResource. resx. Sprejmi-Language prikaže angleščino, ker en obstaja.

image

Če je podana v nizu poizvedbe, ima niz poizvedbe prednost in prikaže se japonščina.

image

Povzetek

Tukaj sem poskušal izvajati večjezično preklapljanje na najlažji način. Če želite preklopiti jezike, da se ujemajo z uporabnikovima okoljem, uporabite naslov HTTP Sprejmi-Language kot privzeti jezik prikaza. Če uporabnik izbere kateri koli jezik, je priporočljivo dodati piškotke ali dodati (ali vnesti neposredno) niza poizvedbe.