ホームページ  >  記事  >  バックエンド開発  >  Asp.Net Core MVC プロジェクトの多言語実装のサンプル コードの詳細な紹介

Asp.Net Core MVC プロジェクトの多言語実装のサンプル コードの詳細な紹介

黄舟
黄舟オリジナル
2017-06-04 09:48:172689ブラウズ

この記事では主にAsp.Net CoreMVCプロジェクト実装多言語インスタンス(グローバリゼーション/ローカリゼーション)について紹介していますので、興味のある方は参考にしてみてください

。最近、Razor MVC プロジェクトに多言語機能を実装しました。それがグローバリゼーション、ローカリゼーションなどと呼ばれるものです。達成される最終的な効果は、ワンクリックでサイト全体の言語を切り替えることであり、開発中に作成する必要があるのは 1 セットのページだけです。

本題に移りましょう

まず、ローカリゼーション リソースを管理し、「翻訳」リンクを完了するために、CultureConfigurer クラスを作成する必要があります。

ここでは、static クラスを使用し、MVC プロジェクトのときに Init( を実行しました)もちろん、最初に interface を作成してから、Dependency Injection を使用してシングルトンを作成することもできます。

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}]";
          }
      }
    }
  }
}

ここで注意すべき点がいくつかあります:

1. enum クラス Culture は、実装される言語を表すために使用されます。ここでは、中国語と英語 (他はわかりません) と、対応する CultureConfigurer を単純に実装しました。クラスには中国語と英語の辞書が 2 つあります

2. Assembly.Load を使用してアセンブリをロードします。パラメータは独自のアセンブリ名です。ここでは 1 つだけ書きました

3. リソース ファイル用の json ファイルを選択しました。 js の利便性 呼び出されます。もちろん、xml または使用したい任意の形式を使用することもできます。解析メソッドを調整して、ファイルの内容を対応する Dictionary にロードするだけです

4. GetValue メソッド を参照してください。実は多言語というのは、どんな言語であっても、ある単語をキーにして、それを現在の言語の単語に「翻訳」するメソッドを呼んでいるということは皆さんも理解されていると思います。たとえば、「Open」がキーとして使用されている場合、中国語辞書には「Open」:「Open」という KeyValuePair が存在し、対応する英語には「Open」:「Open」が存在する必要があります。カルチャーが中国語の場合、「Open」は英語で「Open」を意味します。

5. リソース ファイルはアセンブリ内のどこにでも作成できます。プロジェクトに project.json ファイルがある場合は、独自のファイルの場所に応じてパスを変更するように注意してください

"embed": {
   "include": [
    "Localization/SourceFiles/*.json"
   ]
  }

VS2017 の場合。 csproj ファイルです。追加するリソース ファイルを右クリックし、[プロパティ] を選択し、構成を [すべての構成] に変更し、詳細構成プロパティの [操作の生成] を [埋め込みリソース] に変更します。以下に示すように、

この時点で、ローカリゼーションを実装するためのコア クラスを作成しました。次に、それをページに表示する方法の問題を解決する必要があります。

MVC で新しいクラス MyRazorPage を作成します。 project

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);
    }
  }
}

このクラスは抽象クラスInherits RazorPagebc26e2d35896972142bded266172216c であることに注意してください。次に、Views フォルダーで _ViewImports.cshtml ファイルを見つけ、その中に「@inherits MVC.Views.MyRazorPagebc26e2d35896972142bded266172216c」という行を追加します。これにより、すべての RazorPages が MyRazorPage クラスを継承します。つまり、次のメソッドを記述できます。を使用したい場合は、cshtml で直接呼び出すことができます。ここでは L メソッドを作成し、CultureConfigurer の GetValue メソッドを呼び出しました。次に、ページ上で翻訳する必要があるテキストを @L("Open") のように記述するだけです。

ご覧のとおり、ユーザー言語を Cookie に保存し、誰もがここで独自の実装方法を使用できます。私の実装方法は非常に簡単です。ユーザーが言語を切り替えるときは、インターフェイスにアクセスし、言語を表す Cookie を変更して、ページを更新します。

以上がAsp.Net Core MVC プロジェクトの多言語実装のサンプル コードの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。