ASP.NET viacjazyčné spínanie so vstavanými funkciami jadra MVC

Stránka aktualizovaná :
Dátum vytvorenia strany :

Životné prostredie

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3,0
  • 3,1

Ubytovacom zariadení First

ASP.NET použitie jadra MVC lokalizácia funkcie prepínať medzi viacerými jazykmi na ich zobrazenie.

Vytvorenie súboru prostriedkov pre preložený text

Vytvorte priečinok na uloženie súborov prostriedkov (resx), ktoré spravujú text. Miesto je kdekoľvek, ale nechajte ho priamo pod cestou. Táto cesta ovplyvňuje aj neskoršie nastavenia.

Kliknite pravým tlačidlom myši na projekt a vyberte Pridať alebo nový priečinok.

image

Ponechať zdroje názvu priečinka. Môžete tiež nastaviť tento názov priečinka ľubovoľne, ale môžete zadať tento názov priečinka v neskorších nastaveniach.

image

Potom vytvorte súbor prostriedkov na zadávanie textu pre každý jazyk.

Kliknite pravým tlačidlom myši na priečinok zdroje a vyberte položku Pridať alebo novú položku.

image

Vyberte súbor prostriedkov (. resx). Názov súboru môže byť ľubovoľný, ale musí zodpovedať názvu, ktorý určíte neskôr. Pre túto chvíľu, povedzme SharedResource. resx.

image

Po vytvorení súboru. resx dvojitým kliknutím ho otvoríte a potom zadajte názov, ktorý identifikuje text a text, ktorý chcete skutočne Zobraziť. Súbor SharedResource. resx je súbor, ktorý sa má použiť, ak jazyk neexistuje. Vstúpil som to v japončine tu. Ak chcete, aby boli iné jazyky, napríklad angličtina, predvolené, zadajte ich do tohto jazyka.

Tu sme sa vstúpiť Ahoj a zbohom ako vzorky. Všimnite si, že je malé a veľké písmená.

image

Pokračujte v vytváraní zdrojových súborov pre iné jazyky. Ak chcete identifikovať jazyk, zadajte názov súboru, napríklad sharedresource. ≪ kód kultúry >. resx. Pre kód kultúry môžete zadať jednu alebo obidve kombinácie ISO 639 a ISO 3166. Kód podpory sa môžu zmeniť čas od času, takže CultureInfo trieda na lokalite spoločnosti Microsoft Pozrite sa prosím na stránku.

Tentoraz, EN (angličtina) a ES (španielčina) sú pripravené. Japonský nie je k dispozícii, pretože je predvolená.

image

Zadajte preložený text s klávesmi v rovnakom stave pre každý súbor.

image

image

Ďalej budete mať súbor, ktorý definuje iba triedy. Vytvoríte s rovnakým názvom ako súbor prostriedkov, ktorý ste práve vytvorili.

V skutočnosti, je mi jedno, čo názov samotného súboru kódu je, pretože stačí, aby zodpovedali názvu triedy vnútri, ale ponechať to rovnaké, takže je ľahké pochopiť. Nezáleží na tom, kam chcete napísať kód.

image

Vytvorte priestor názvov koreň projektu a vytvoriť prázdnu triedu.

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

Opraviť každý program

Startup.cs

Opraviť Startup.cs. Opíšte metódu ConfigureServices takto:

Služby. AddMvc (). Ak existuje metóda AddViewLocalization, text preložený obe strany zobrazenia a strane ovládača je Som si istý, že môžem dostať, ale Ako aj na oficiálnych internetových stránkach služieb. Neexistuje žiadny problém s volaním AddLocalization metóda spolu.

Možnosti. ResourcesPath určuje cestu k priečinku, kde sa nachádza súbor resx. Ak sú špecifikované obidve, služby. AddMvc (). AddViewLocalization metóda má prednosť.

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

Potom upravte spôsob konfigurácie pre Startup.cs. Ak chcete len čítať súbor prostriedkov, nepotrebujete ho. Kód, ktorý je povinný umožniť užívateľovi špecifikovať jazyk ľubovoľne.

Sme pomocou funkcie postavené v ASP.NET Core MVC ako štandard. Nasledujúci kód popisuje "dotaz reťazec", "cookie" a "akceptovať-jazyk HTTP hlavičky" v závislosti od prostredia používateľa. V jednom z nich môžete prepínať medzi jazykmi rozhrania. Uvidíme sa neskôr, ako skontrolovať skutočnú operáciu.

Prepínateľný jazyk je tu špecifikovaná v poli (Supportedkultúr). I špecifikované ja ako predvolený jazyk, ale ja som nevytvoril súbor ja tentoraz. SharedResource. resx sa používa, ak je zadaný iný jazyk ako EN, ES.

Môžete oddeliť UI od jazykov, ktoré podporujú, ale nie je moc prínosom pre oddelenie to. Máte rovnaký jazyk.

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 súbor. Ak chcete získať lokalizovaný jazyk na strane ovládača, iStringLocalizer je prijatý v konštruktéra. SharedResource musí mať rovnaký názov ako trieda, ktorú ste vytvorili predtým. Text je odovzdaný dovozcovi prijatého Localizer odovzdaním kľúča reťazca zadaného v súbore prostriedkov. možno načítať. Jazyk textu je určený na základe požadovanej kultúry.

Mimochodom, okrem IStringLocalizer, tam je tiež IHtmlLocalizer, ktorý môže dostať HTML, ako to 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();
  }

  // 省略
}

Zobrazenie \ _ViewImports. cshtml

Zobrazenie \ _ViewImports. cshtml súboru. Ak chcete použiť Lokalizátor na strane zobrazenia, musíte aplikovať IHtmlLocalizer. Ak ste opísali to takto pre teraz, je to v poriadku. Tiež SharedResource musí mať rovnaký názov ako súbor prostriedkov a triedy ste vytvorili predtým.

IHtmlLocalizer je v Microsoft. AspNetCore. MVC. Lokalizácia namespace, tak som to definovať ako použitie.

Ak chcete použiť Localizer iba v určitom bode, môžete zahrnúť nasledujúci kód do samostatného súboru zobrazenia. Ak píšete v súbore _ViewImports. cshtml, budete ho môcť automaticky používať vo všetkých súboroch zobrazenia.

@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 súbor. Text získaný na strane ovládača a text získaný priamo na strane zobrazenia sú zobrazené v uvedenom poradí. Zobrazenie-bočné Localizer tiež dostane text zadaním kľúča reťazec pre 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>

Kontrola prevádzky

Reťazec dotazu

Jazyk zobrazenia môžete prepnúť zadaním kódu kultúry do reťazca dotazu adresy URL. Formát je ? kultúra = < kód kultúry >. Ak chcete oddeliť od UI, bude to ? kultúra = < kultúrny kód > & UI-kultúra = < kód kultúry >.

Ak neurčíte nič: Ak nie je zadaná, použije sa SharedResource. resx. (V skutočnosti sa uplatnil iný rozsudok...)

image

Vzor určený pre ? kultúra = sk. Jazyk zobrazenia je angličtina.

image

Vzor určený pre ? kultúra = ES. Jazyk zobrazenia je španielsky.

image

Vzor určený pre ? kultúra = ja. Pôvodne sa používa súbor SharedResource. ja. resx. SharedResource. resx sa používa, pretože neexistuje.

image

Pokúste sa zadať jazyk, ktorý neexistuje. SharedResource. resx sa používa, pretože neexistuje žiadny zodpovedajúci súbor tu.

image

Cookies

Cookies môžu prepínať jazyk zobrazenia. Zvyčajne zverejnené na strane servera, ale tentoraz sa pokúsim registrovať cookies priamo v prehliadači funkcie.

Pretože každý webový prehľadávač má vývojový nástroj, môžete ho použiť na registráciu súborov cookie. Na obrázku nižšie môžete stlačením klávesu F12 na okraji Zobraziť vývojárske nástroje.

Názov zodpovedajúceho súboru cookie je . AspNetCore. Culture, a hodnota, ktorá určuje jazyk je Zadajte formulár c = < kultúra kód > | UIC = < kód kultúry >. V prípade súborov cookie musíte zadať aj kód používateľského rozhrania. Po zaregistrovaní súboru cookie obnovte stránku webového prehľadávača a obnovte ju. Cookie sa odošle na server tak, že server načíta zadaný jazyk.

Na obrázku nižšie môžete zadať c = EN | UIC = EN na zobrazenie angličtiny.

image

typ c = ES | UIC = ES na zobrazenie španielčiny.

image

Hlavička protokolu HTTP akceptujte jazyk

Hlavička protokolu HTTP v akceptuje jazyk kontroluje informácie o hlavičke požadované z webového prehľadávača na server. Je to schopnosť prepínať jazyky zodpovedajúcim spôsobom.

V nastaveniach webového prehľadávača môžete odosielať ľubovoľný jazyk, ale v predvolenom nastavení sa môžete zhodovať s nastaveniami jazyka operačného systému. Prijíma-jazyk je teraz odoslaná. (Či je alebo nie je skutočne odoslaná závisí na OS a webový prehliadač.) Jazyk je inicializovaný vo webovom prehľadávači pre jazyk operačného systému, ale môže to byť správne.)

Takže napríklad, ako je znázornené na obrázku nižšie, môžete otvoriť stránku vo webovom prehľadávači v anglickom jazyku-OS a poslať EN informácie, takže môžete automaticky SharedResource. en. resx je vybratá na zobrazenie angličtiny.

image

Ak sa pokúsite zadať jazyk, ktorý neexistuje v reťazci dotazu, mali by ste pôvodne použiť SharedResource. resx. Accept-Language zobrazí angličtinu, pretože EN existuje.

image

Ak je v reťazci dotazu zadaná položka ja, reťazec dotazu má prednosť a zobrazí sa japončina.

image

Zhrnutie

Tu som sa snažil implementovať viacjazyčné prepínanie v najjednoduchším spôsobom. Ak chcete prepnúť jazyky tak, aby zodpovedali používateľskému prostrediu, použite hlavičku HTTP akceptovaného jazyka ako predvolený jazyk zobrazenia. Ak používateľ vyberie ľubovoľný jazyk, je vhodné pridať súbory cookie alebo pridať (alebo zadať priamo) reťazca dotazu.