ASP.NET vícejazyčné spínání s vestavěnými základními funkcemi MVC
Prostředí
- Visual Studio
-
- Visual Studio 2019
- ASP.NET jádro
-
- 3.0
- 3.1
Zpočátku
ASP.NET k jejich zobrazení pomocí základních lokalizačních funkcí MVC přepínat mezi více jazyky.
Vytvoření souboru prostředků pro přeložený text
Vytvořte složku pro uložení souborů prostředků (Resx), které spravují text. Poloha je kdekoli, ale nechte ji přímo pod trasou. Tato cesta také ovlivňuje pozdější nastavení.
Klikněte pravým tlačítkem myši na projekt a vyberte Přidat nebo Nová složka.
Ponechte prostředky názvu složky. Tento název složky můžete také nastavit libovolně, ale tento název složky můžete zadat v pozdějších nastaveních.
Potom vytvořte soubor prostředků pro zadávání textu pro každý jazyk.
Klikněte pravým tlačítkem myši na složku Zdroje a vyberte Přidat nebo Novou položku.
Vyberte soubor prostředků (.resx). Název souboru může být libovolný, ale musí se shodovat s názvem, který zadáte později. Prozatím řekněme SharedResource.resx.
Po vytvoření souboru Resx jej poklepáním otevřete a zadejte název, který identifikuje text a text, který chcete skutečně zobrazit. Soubor SharedResource.resx je soubor, který se má použít, pokud jazyk neexistuje. Vstoupil jsem to v japonštině zde. Pokud chcete, aby výchozí byly jiné jazyky, například angličtina, zadejte je do tohoto jazyka.
Zde zadáváme Hello and Goodbye jako ukázky. Všimněte si, že se rozlišuje malá a velká písmena.
Pokračujte ve vytváření souborů prostředků pro jiné jazyky. Chcete-li jazyk identifikovat, zadejte název souboru, například SharedResource.<Culture Code>.resx. Pro kód jazykové verze můžete zadat jednu nebo obě kombinace ISO 639 a ISO 3166. Kód podpory se může čas od času změnit, takže třída CultureInfo na webu společnosti Microsoft Naleznete na stránce.
Tentokrát jsou připraveny en (anglicky) a es (španělština). Japonština není k dispozici, protože se jedná o výchozí hodnotu.
Zadejte přeložený text s klíči ve stejném stavu pro každý soubor.
Dále budete mít soubor, který definuje pouze třídy. Vytvoříte jej se stejným názvem jako soubor prostředků, který jste právě vytvořili.
Ve skutečnosti je mi jedno, jaký je název samotného souboru kódu, protože stačí, abyste se shodovali s názvem třídy uvnitř, ale nechte to stejné, aby bylo snadné pochopit. Nezáleží na tom, kde chcete napsat kód.
Vytvořte obor názvů kořen projektu a vytvořte prázdnou třídu.
namespace LocalizationText
{
// クラス名は作成した .resx のファイル名と同じにする必要がある
public class SharedResource { }
}
Oprava každého programu
Startup.cs
Opravte Startup.cs. Popište metodu ConfigureServices následujícím způsobem:
Služby. AddMvc(). Pokud existuje metoda AddViewLocalization, text přeložený na straně zobrazení i na straně kontroloru je Jsem si jistý, že to dostanu, ale Jak je také na oficiálních stránkách služby. Neexistuje žádný problém s voláním AddLocalization metoda společně.
Možnosti. ResourcesPath určuje cestu ke složce, ve které je soubor Resx umístěn. Pokud jsou zadány obě, služby. AddMvc(). Metoda AddViewLocalization má přednost.
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 metodu Configure pro Startup.cs. Pokud si chcete soubor prostředků přečíst, nepotřebujete ho. Kód, který je nutný k tomu, aby uživatel mohl libovolně zadat jazyk.
Standardně používáme funkce zabudované ASP.NET Core MVC. Následující kód popisuje "řetězec dotazu", "cookie" a "Hlavička HTTP v jazyce přijetí jazyka" v závislosti na prostředí uživatele. V jednom z nich můžete přepínat mezi jazyky zobrazení. Uvidíme se později, jak zkontrolovat skutečnou operaci.
Přepínatelný jazyk je zde zadán v poli (supportedCultures). Zadal jsem ja jako výchozí jazyk, ale tentokrát jsem soubor ja nevytvořil. SharedResource.resx se používá, pokud je zadán jiný jazyk než en, es.
Můžete oddělit ui z jazyků, které podporujete, ale není velký přínos pro jeho oddělení. Máte stejný 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();
// 省略
}
Řadiče\HomeController.cs
Soubor Controllers\HomeController.cs.
Chcete-li získat lokalizovaný jazyk na straně řadiče, iStringLocalizer
Mimochodem, kromě IStringLocalizer, je také IHtmlLocalizer, který může získat HTML, jak 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();
}
// 省略
}
Zobrazení\_ViewImports.cshtml
Zobrazení\_ViewImports.cshtml.
Chcete-li použít lokalizační prostředek na
IHtmlLocalizer je v oboru názvů Microsoft.AspNetCore.Mvc.Localization, takže to budu definovat jako použití.
Pokud chcete použít pouze localizer v určitém okamžiku, můžete zahrnout následující kód do samostatného souboru zobrazení. Pokud jej napíšete do souboru _ViewImports.cshtml, budete jej moci automaticky používat ve všech souborech zobrazení.
@using LocalizationText
@using LocalizationText.Models
@using Microsoft.AspNetCore.Mvc.Localization
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@* ビュー側でローカライザーを使用できるように定義します *@
@inject IHtmlLocalizer<SharedResource> Localizer
Zobrazení\Domů\Index.cshtml
Zobrazení\Domů\Index.cshtml. Text získaný na straně regulátoru a text získaný přímo na straně pohledu jsou zobrazeny. Lokalizátor na straně zobrazení také získá text zadáním řetězce klíče pro 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>
Zkontrolovat provoz
Řetězec dotazu
Jazyk zobrazení můžete přepnout zadáním kódu jazykové verze v řetězci dotazu adresy URL. Formát je ?culture=<culture code>. Pokud jej chcete oddělit od ui, bude to ?culture=<culture code>&ui-culture=<culture>.
Pokud nic nezadáte: Pokud není zadán, sharedResource.resx se používá. (Ve skutečnosti byl použit jiný rozsudek...)
Vzor zadaný pro ?culture=en. Jazyk zobrazení je angličtina.
Vzor zadaný pro ?culture=es. Jazyk zobrazení je španělština.
Vzor zadaný pro ?culture=ja. Původně se používá soubor SharedResource.ja.resx. SharedResource.resx se používá, protože neexistuje.
Zkuste zadat jazyk, který neexistuje. SharedResource.resx se používá, protože zde není žádný odpovídající soubor.
Soubory cookie
Soubory cookie mohou přepnout jazyk zobrazení. Normálně publikoval ze strany serveru, ale tentokrát se budu snažit zaregistrovat cookies přímo ve funkci prohlížeče.
Protože každý webový prohlížeč má vývojářský nástroj, můžete jej použít k registraci souborů cookie. Na obrázku níže můžete stisknutím klávesy F12 na hraně zobrazit vývojářské nástroje.
Název odpovídajícího souboru cookie je . AspNetCore.Culture a hodnota, která určuje jazyk, je Zadejte ve formě c=<kód jazykové verze>|uic=<culture code>. U souborů cookie musíte také zadat kód ui. Jakmile soubor cookie zaregistrujete, aktualizujte stránku webového prohlížeče a aktualizujte jej. Soubor cookie je odeslán na server tak, aby server načetl zadaný jazyk.
Na obrázku níže můžete zadat c=en|uic=en pro zobrazení angličtiny.
zadejte c=es|uic=es pro zobrazení španělštiny.
Hlavička HTTP v jazyce přijetí
Hlavička HTTP v jazyce přijetí jazyka kontroluje informace záhlaví požadované z webového prohlížeče na server. Je to schopnost odpovídajícím způsobem přepínat jazyky.
V nastavení webového prohlížeče můžete odeslat libovolný jazyk Accept-Language, ale ve výchozím nastavení můžete odpovídat nastavení jazyka operačního systému. Accept-Language je nyní odeslán. (Zda je či není skutečně odeslána, závisí na os a webový prohlížeč.) Jazyk je inicializován ve webovém prohlížeči pro jazyk operačního serveru, ale může být správný.)
Tak, například, jak je znázorněno na obrázku níže, můžete otevřít stránku ve webovém prohlížeči v anglickém jazyce OS a odeslat en informace, takže můžete automaticky SharedResource.en.resx je vybrán pro zobrazení angličtiny.
Pokud se pokusíte zadat jazyk, který v řetězci dotazu neexistuje, měli byste původně použít SharedResource.resx. Accept-Language zobrazí angličtinu, protože en existuje.
Pokud je ja zadána v řetězci dotazu, má přednost řetězec dotazu a zobrazí se japonština.
Shrnutí
Zde jsem se snažil implementovat vícejazyčné přepínání v nejjednodušším způsobem. Chcete-li přepnout jazyky tak, aby odpovídaly prostředí uživatele, použijte jako výchozí jazyk zobrazení hlavičku HTTP v jazyce přijetí jazyka. Pokud si uživatel zvolí libovolný jazyk, je vhodné přidat soubory cookie nebo přidat (nebo zadat přímo) řetězce dotazu.