Maison >développement back-end >Tutoriel C#.Net >Introduction détaillée à l'exemple de code pour l'implémentation multilingue du projet Asp.Net Core MVC
Cet article présente principalement l'instance Asp.Net Core MVC de mise en œuvre Multi-langue (Globalisation/Localisation), avec Il a une certaine valeur de référence. Si vous êtes intéressé, vous pouvez le consulter
Je viens d'implémenter une fonction multilingue pour un projet Razor MVC, appelé Globalisation, Localisation, peu importe. L'effet final à obtenir est de changer la langue de l'ensemble du site en un seul clic, et un seul ensemble de pages doit être écrit lors du développement.
Entrons dans le vif du sujet
Tout d'abord, nous devons créer une classe CultureConfigurer pour gérer les ressources de localisation et compléter le lien "traduction" :
Ici, j'ai utilisé Classe statique, puis exécutez la méthode Init() lorsque le démarrage du projet MVC est en fait un peu stupide. Bien sûr, vous pouvez également écrire une interface d'abord, puis utiliser Injection de dépendances<.> pour créer un singleton .
using System.Collections.Generic; using System.IO; using System.Reflection; using Newtonsoft.Json; namespace Localization { public enum Culture { Cn, En } public static class CultureConfigurer { private static Dictionary<string, string> _enDictionary; private static Dictionary<string, string> _cnDictionary; public static void Init() { var assembly = Assembly.Load(new AssemblyName("Localization")); var resourceNames = assembly.GetManifestResourceNames(); foreach (var resourceName in resourceNames) { if (resourceName.EndsWith("en-US.json") || resourceName.EndsWith("zh-CN.json")) { using (var stream = assembly.GetManifestResourceStream(resourceName)) { if (stream != null) { using (StreamReader reader = new StreamReader(stream)) { var content = reader.ReadToEnd(); Dictionary<string, string> localizationDictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(content); if (resourceName.EndsWith("en-US.json")) { _enDictionary = localizationDictionary; } else { _cnDictionary = localizationDictionary; } } } } } } } public static string GetValue(string key, Culture culture) { switch (culture) { case (Culture.Cn): { if (_cnDictionary.ContainsKey(key)) { return _cnDictionary[key]; } else { return $"[{key}]"; } } case (Culture.En): { if (_enDictionary.ContainsKey(key)) { return _enDictionary[key]; } else { return $"[{key}]"; } } default: { return $"[{key}]"; } } } } }Quelques points doivent être notés ici : 1. La classe enum Culture est utilisée pour représenter la langue à implémenter Ici, j'ai simplement implémenté le chinois et l'anglais (je. je ne comprends pas les autres) ), la classe CultureConfigurer correspondante a deux Dictionnaire en chinois et en anglais 2. Utilisez Assembly.Load pour charger l'assembly, le paramètre est votre propre nom d'assembly, je viens d'en écrire un ici 3. J'ai choisi le fichier json pour le fichier de ressources, également pour faciliter l'appel en js. Bien sûr, vous pouvez également utiliser 4. En voyant la méthode Get 5. Les fichiers de ressources peuvent être créés n'importe où dans l'assembly. Si votre projet possède un fichier project.json, ajoutez-le dans les buildOptions. Attention à modifier le chemin en fonction de votre propre emplacement de fichier
<.>
S'il s'agit de VS2017, il s'agit d'un fichier csproj, puis faites un clic droit sur le fichier de ressources à ajouter, sélectionnez ""embed": { "include": [ "Localization/SourceFiles/*.json" ] }Propriétés
", changez la configuration en "Toutes les configurations", et modifiez le « Générer une opération » dans les propriétés de configuration avancées est une « ressource intégrée », comme indiqué ci-dessous :
À ce stade, nous avons écrit la classe principale pour implémenter la localisation. nous devons résoudre le problème de comment l'afficher sur la page :
Créez une nouvelle classe MyRazorPage
Notez que cette classe est unusing System; using Microsoft.AspNetCore.Mvc.Razor; using Localization; namespace MVC.Views { public abstract class MyRazorPage<TModel> : RazorPage<TModel> { public virtual string L(string source) { var value = Context.Request.Cookies["culture"]; Culture c; if (string.IsNullOrEmpty(value) || !Enum.TryParse(value, out c)) { c = Culture.Cn; } return CultureConfigurer.GetValue(source, c); } } }. classe abstraite
et hérite RazorPagebc26e2d35896972142bded266172216c Recherchez ensuite le fichier _ViewImports.cshtml dans le dossier Views et ajoutez-y une ligne "@inherits MVC.Views.MyRazorPagebc26e2d35896972142bded266172216c", afin que toutes vos RazorPages héritent de la classe MyRazorPage, ce qui signifie que vous pouvez écrire la méthode que vous souhaitez utiliser et vous pouvez l'appeler directement en cshtml. Ici, j'ai écrit une méthode L et appelé la méthode GetValue de CultureConfigurer. Ensuite, le texte à traduire sur la page doit simplement être écrit comme @L("Open"). Comme vous pouvez le voir, j'enregistre la langue de l'utilisateur dans Cookie, et chacun peut avoir ici ses propres méthodes d'implémentation. Ma méthode d'implémentation est très simple. Lorsque l'utilisateur change de langue, il accède à une interface, modifie le cookie représentant la langue, puis actualise la page.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!