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}]"; } } } } }
<. 🎜 >
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" ] }
", 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); } } }
et hérite RazorPage
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!