ASP.NET commutation multilingue avec des fonctionnalités intégrées MVC de base
Environnement
- Studio visuel
-
- Studio visuel 2019
- ASP.NET cœur
-
- 3.0
- 3.1
Dans un premier temps
ASP.NET utiliser les fonctionnalités de localisation MVC de base pour passer d’une langue à plusieurs pour les afficher.
Créer un fichier de ressources pour le texte traduit
Créez un dossier pour stocker les fichiers de ressources (Resx) qui gèrent le texte. L’emplacement est n’importe où, mais laissez-le directement en dessous de l’itinéraire. Ce chemin affecte également les paramètres ultérieurs.
Cliquez à droite sur le projet et sélectionnez Ajouter ou Nouveau dossier.
Laissez les ressources de nom de dossier. Vous pouvez également définir ce nom de dossier arbitrairement, mais vous pouvez spécifier ce nom de dossier dans les paramètres ultérieurs.
Ensuite, créez un fichier de ressources pour entrer du texte pour chaque langue.
Cliquez à droite sur le dossier Ressources et sélectionnez Ajouter ou Nouvel article.
Sélectionnez le fichier de ressources (.resx). Le nom du fichier peut être arbitraire, mais il doit correspondre au nom que vous spécifiez plus tard. Pour l’instant, disons SharedResource.resx.
Après avoir créé le fichier .resx, double-cliquez pour l’ouvrir, puis tapez le nom qui identifie le texte et le texte que vous souhaitez réellement afficher. Le fichier SharedResource.resx est le fichier à utiliser si la langue n’existe pas. Je l’ai entré en japonais ici. Si vous voulez que d’autres langues, comme l’anglais, soient par défaut, entrez-les dans cette langue.
Ici, nous entrons Bonjour et au revoir comme des échantillons. Notez qu’il est sensible aux cas.
Continuez à créer des fichiers de ressources pour d’autres langues. Pour identifier la langue, spécifiez le nom du fichier, tel que SharedResource. Vous pouvez spécifier une ou les deux combinaisons d’ISO 639 et ISO 3166 pour le code culturel. Le code de support est sujet à changer de temps en temps, de sorte que la classe CultureInfo sur le site Microsoft Veuillez consulter la page.
Cette fois, en (anglais) et es (espagnol) sont préparés. Le japonais n’est pas disponible parce que c’est la valeur par défaut.
Entrez le texte traduit avec les clés dans le même état pour chaque fichier.
Ensuite, vous aurez un fichier qui ne définit que les classes. Vous créez ceci avec le même nom que le fichier de ressources que vous venez de créer.
En fait, je ne me soucie pas de ce que le nom du fichier de code lui-même est parce que vous n’avez qu’à correspondre au nom de la classe à l’intérieur, mais laissez-le la même sorte qu’il est facile à comprendre. Peu importe où vous voulez écrire le code.
Faites de l’espace nom la racine du projet et créez une classe vide.
namespace LocalizationText
{
// クラス名は作成した .resx のファイル名と同じにする必要がある
public class SharedResource { }
}
Fixer chaque programme
Startup.cs
Répare Startup.cs. Décrivez la méthode ConfigureServices comme suit :
Services. AddMvc (). S’il existe une méthode AddViewLocalization, le texte traduit par le côté de la vue et le côté contrôleur est Je suis sûr que je peux l’obtenir, mais Comme c’est également le fait sur les services officiels du site Web. Il n’y a aucun problème à appeler la méthode AddLocalization ensemble.
Options. ResourcesPath spécifie le chemin du dossier où se trouve le fichier Resx. Si les deux sont spécifiés, les services. AddMvc (). La méthode AddViewLocalization prime.
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"; });
}
Modifiez ensuite la méthode Configure pour Startup.cs. Si vous voulez simplement lire le fichier de ressources, vous n’en avez pas besoin. Code qui est nécessaire pour permettre à l’utilisateur de spécifier une langue arbitrairement.
Nous utilisons les fonctionnalités intégrées dans ASP.NET Core MVC en standard. Le code suivant décrit la « chaîne de requête », le « cookie » et « l’en-tête http://Accept-Language » selon l’environnement de l’utilisateur. Vous pouvez basculer entre les langues d’affichage dans l’une d’elles. Nous vous verrons plus tard comment vérifier l’opération proprement dite.
La langue commutable est spécifiée ici dans le tableau (supportCultures). J’ai spécifié ja comme la langue par défaut, mais je n’ai pas créé le fichier ja cette fois. SharedResource.resx est utilisé si une langue autre que fr, es est spécifiée.
Vous pouvez séparer l’interface utilisateur des langues que vous soutenez, mais il n’y a pas beaucoup d’avantages à la séparer. Vous avez la même langue.
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();
// 省略
}
Contrôleurs-HomeController.cs
Fichier Controllers-HomeController.cs.
Pour obtenir une langue localisée du côté du contrôleur, iStringLocalizer
Soit dit en passant, en plus de IStringLocalizer, il ya aussi un IHtmlLocalizer qui peut obtenir HTML tel qu’il est.
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();
}
// 省略
}
Vues _ViewImports.cshtml
Fichier Vues _ViewImports.cshtml.
Pour utiliser un localisateur sur le côté de
IHtmlLocalizer est dans le Microsoft.AspNetCore.Mvc.Localization namespace, donc je vais définir cela comme l’utilisation.
Si vous souhaitez seulement utiliser le localisateur à un certain point, vous pouvez inclure le code suivant dans un fichier de vue séparé. Si vous l’écrivez dans un fichier _ViewImports.cshtml, vous serez automatiquement en mesure de l’utiliser dans tous les fichiers de vue.
@using LocalizationText
@using LocalizationText.Models
@using Microsoft.AspNetCore.Mvc.Localization
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@* ビュー側でローカライザーを使用できるように定義します *@
@inject IHtmlLocalizer<SharedResource> Localizer
Vues-Home-Index.cshtml
Fichier Vues-Home-Index.cshtml. Le texte obtenu du côté du contrôleur et le texte obtenu directement sur le côté de la vue sont affichés respectivement. Le localisateur côté vue obtient également le texte en spécifiant une chaîne de clé pour l’indexeur.
@{
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>
Vérifier l’opération
Chaîne de requête
Vous pouvez changer la langue d’affichage en spécifiant un code de culture dans la chaîne de requête de l’URL. Le format est ?culture-lt;culture code -gt;. Si vous voulez le séparer de l’interface utilisateur, il sera?culture et code de culture 'gt;'amp; ui-culture 'lt;culture’gt;.
Si vous ne spécifiez rien : S’il n’est pas spécifié, SharedResource.resx est utilisé. (En fait, un autre jugement a été appliqué...)
Le modèle spécifié pour ?culture-en. La langue d’affichage est l’anglais.
Le modèle spécifié pour ?culture’es. La langue d’affichage est l’espagnol.
Le modèle spécifié pour ?culture-ja. À l’origine, le fichier SharedResource.ja.resx est utilisé. SharedResource.resx est utilisé parce qu’il n’existe pas.
Essayez de spécifier une langue qui n’existe pas. SharedResource.resx est utilisé parce qu’il n’y a pas de fichier correspondant ici.
Cookies
Les cookies peuvent changer la langue d’affichage. Normalement publié du côté serveur, mais cette fois je vais essayer d’enregistrer des cookies directement dans la fonction du navigateur.
Parce que chaque navigateur Web dispose d’un outil de développeur, vous l’utilisez pour enregistrer les cookies. Dans la figure ci-dessous, vous pouvez appuyer sur F12 sur Edge pour afficher les outils du développeur.
Le nom du cookie correspondant est . AspNetCore.Culture, et la valeur qui spécifie la langue est Entrez sous la forme de code de culture c’lt;gt;uic’lt;culture code’gt;. Pour les cookies, vous devez également entrer le code ui. Une fois que vous avez enregistré votre cookie, actualisez votre page de navigateur Web pour le rafraîchir. Un cookie est envoyé au serveur afin que le serveur récupère la langue spécifiée.
Dans la figure ci-dessous, vous pouvez entrer c’en’uic’en pour afficher l’anglais.
tapez c’es-uic’es pour afficher l’espagnol.
En-tête http://Accept-Language
L’en-tête Accept-Language HTTP vérifie les informations d’en-tête demandées sur le navigateur Web au serveur. C’est la capacité de changer de langue en conséquence.
Vous pouvez envoyer n’importe quel Accept-Language dans les paramètres de votre navigateur Web, mais par défaut, vous pouvez correspondre aux paramètres de la langue os. Accept-Language est maintenant envoyé. (Qu’il soit effectivement envoyé ou non dépend du système d’exploitation et du navigateur Web.) La langue est parasociée dans le navigateur Web pour la langue de l’OS, mais elle peut être correcte.)
Ainsi, par exemple, comme indiqué dans la figure ci-dessous, vous pouvez ouvrir la page dans le navigateur Web du système d’exploitation de langue anglaise et envoyer des informations, de sorte que vous pouvez automatiquement SharedResource.fr.resx est sélectionné pour afficher l’anglais.
Si vous essayez de spécifier une langue qui n’existe pas dans la chaîne de requête, vous devez à l’origine utiliser SharedResource.resx. Accept-Language affiche l’anglais parce qu’il existe.
Si ja est spécifié dans la chaîne de requête, la corde de requête a préséance et le japonais est affiché.
Résumé
Ici, j’ai essayé d’implémenter la commutation multilingue de la manière la plus facile. Pour changer de langue pour correspondre à l’environnement de l’utilisateur, utilisez l’en-tête Http Accept-Language comme langue d’affichage par défaut. Si l’utilisateur choisit une langue, il est bon d’ajouter des cookies ou d’ajouter (ou d’entrer directement) de la chaîne de requête.