Maison  >  Article  >  développement back-end  >  Introduction détaillée à l'exemple de code pour l'implémentation multilingue du projet Asp.Net Core MVC

Introduction détaillée à l'exemple de code pour l'implémentation multilingue du projet Asp.Net Core MVC

黄舟
黄舟original
2017-06-04 09:48:172690parcourir

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

xml ou n'importe quel format que vous souhaitez utiliser. ajustez la méthode d'analyse et convertissez le fichier. Chargez simplement le contenu dans le dictionnaire correspondant

 4. En voyant la méthode Get

Value, je pense que tout le monde l'a compris. En fait, quelle que soit la langue. c'est vrai, il utilise un certain Le mot est utilisé comme clé, puis cette méthode est appelée pour "traduire" le mot dans la langue actuelle. Par exemple, si « Open » est utilisé comme clé, alors il devrait y avoir une KeyValuePair dans le dictionnaire chinois qui est « Open » : « Open », et la langue anglaise correspondante devrait avoir un « Open » : « Open », puis lorsque la culture est en chinois, l'affichage sera « Open » signifie « Open » en anglais.

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 un
using 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn