Heim >Backend-Entwicklung >C#.Net-Tutorial >Detaillierte Einführung in den Beispielcode für die mehrsprachige Implementierung des Asp.Net Core MVC-Projekts

Detaillierte Einführung in den Beispielcode für die mehrsprachige Implementierung des Asp.Net Core MVC-Projekts

黄舟
黄舟Original
2017-06-04 09:48:172707Durchsuche

In diesem Artikel wird hauptsächlich die Asp.Net Core MVC-Projektimplementierung Mehrsprachigkeit (Globalisierung/Lokalisierung) vorgestellt Es hat einen gewissen Referenzwert.

Ich habe kürzlich eine mehrsprachige Funktion für ein Razor MVC-Projekt implementiert. was auch immer. Der endgültige Effekt besteht darin, die Sprache der gesamten Website mit einem Klick zu ändern und während der Entwicklung nur einen Satz Seiten zu schreiben.

Kommen wir zum Punkt

Zuerst müssen wir eine CultureConfigurer-Klasse erstellen, um Lokalisierungsressourcen zu verwalten und den Link „Übersetzung“ zu vervollständigen:

Hier habe ich verwendet Statische -Klasse und dann die Init()-Methode ausführen, wenn das MVC-Projekt StartUp tatsächlich etwas dumm ist. Natürlich können Sie auch zuerst eine Schnittstelle schreiben und dann Abhängigkeitsinjektion um einen Singleton zu erstellen.

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}]";
          }
      }
    }
  }
}
Ein paar Punkte müssen hier beachtet werden:

1. Die Enum-Klasse Culture wird verwendet, um die zu implementierende Sprache darzustellen. Hier habe ich einfach Chinesisch und Englisch implementiert (I Verstehe die anderen nicht) ), die entsprechende CultureConfigurer-Klasse hat zwei Wörterbuch

in Chinesisch und Englisch 2. Verwenden Sie Assembly.Load, um die Assembly zu laden, der Parameter ist Ihr eigener Assemblyname, ich habe gerade einen hier geschrieben

 3. Ich habe die JSON-Datei als Ressourcendatei ausgewählt, auch um den Aufruf in js zu erleichtern. Natürlich können Sie auch

xml oder jedes andere Format verwenden, das Sie verwenden möchten Passen Sie die Analysemethode an und konvertieren Sie die Datei. Laden Sie einfach den Inhalt in das entsprechende Wörterbuch

 4. Wenn ich die Get

Value-Methode sehe, glaube ich, dass jeder sie verstanden hat, egal in welcher Sprache Das heißt, es verwendet ein bestimmtes Wort als Schlüssel und ruft dann diese Methode auf, um das Wort in die aktuelle Sprache zu „übersetzen“. Wenn beispielsweise „Open“ als Schlüssel verwendet wird, sollte es im chinesischen Wörterbuch ein KeyValuePair geben, das „Open“ lautet: „Open“, und die entsprechende englische Sprache sollte ein „Open“: „Open“ haben Wenn die Kultur auf Chinesisch ist, lautet die Anzeige „Open“, was auf Englisch „Open“ bedeutet.

5. Ressourcendateien können an einer beliebigen Stelle in der Assembly erstellt werden. Wenn Ihr Projekt über eine project.json-Datei verfügt, fügen Sie diese in den buildOptions hinzu. Passen Sie den Pfad entsprechend Ihrem eigenen Dateispeicherort an

"embed": {
   "include": [
    "Localization/SourceFiles/*.json"
   ]
  }
Wenn es sich um VS2017 handelt, handelt es sich um eine CSPROJ-Datei. Klicken Sie dann mit der rechten Maustaste auf die hinzuzufügende Ressourcendatei, wählen Sie „

Eigenschaften“, ändern Sie die Konfiguration in „Alle Konfigurationen“ und ändern Sie die „Operation generieren“ in den erweiterten Konfigurationseigenschaften ist „eingebettete Ressource“, wie unten gezeigt:

An diesem Punkt haben wir die Kernklasse geschrieben, um die Lokalisierung zu implementieren. Wir müssen das Problem lösen, wie es auf der Seite angezeigt wird:

Erstellen Sie eine neue Klasse MyRazorPage

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);
    }
  }
}
Beachten Sie, dass es sich bei dieser Klasse um ein

handelt abstrakte Klasse und erbt RazorPagebc26e2d35896972142bded266172216c Suchen Sie dann die Datei _ViewImports.cshtml im Ordner „Views“ und fügen Sie darin eine Zeile „@inherits MVC.Views.MyRazorPagebc26e2d35896972142bded266172216c“ hinzu, damit alle Ihre RazorPages die MyRazorPage-Klasse erben, was bedeutet, dass Sie die Methode selbst schreiben können verwenden möchten und Sie können es direkt in cshtml aufrufen. Hier habe ich eine L-Methode geschrieben und die GetValue-Methode von CultureConfigurer aufgerufen. Dann muss der zu übersetzende Text auf der Seite nur noch wie @L("Open") geschrieben werden. ​

Wie Sie sehen, speichere ich die Benutzersprache in Cookie und jeder kann hier seine eigenen Implementierungsmethoden haben. Meine Implementierungsmethode ist sehr einfach. Wenn der Benutzer die Sprache wechselt, greift er auf eine Schnittstelle zu, ändert das Cookie, das die Sprache darstellt, und aktualisiert dann die Seite.


Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den Beispielcode für die mehrsprachige Implementierung des Asp.Net Core MVC-Projekts. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn