>  기사  >  백엔드 개발  >  Asp.Net Core MVC 프로젝트의 다국어 구현을 위한 샘플 코드에 대한 자세한 소개

Asp.Net Core MVC 프로젝트의 다국어 구현을 위한 샘플 코드에 대한 자세한 소개

黄舟
黄舟원래의
2017-06-04 09:48:172645검색

이 글은 주로 Asp.Net Core MVC프로젝트 구현다국어인스턴스(세계화/현지화)에 대해 소개하고 있으니 관심 있는 분들은 참고하시면 좋을 것 같습니다

최근에는 세계화, 현지화 등 Razor MVC 프로젝트에 대한 다중 언어 기능을 구현했습니다. 달성할 수 있는 최종 효과는 한 번의 클릭으로 전체 사이트의 언어를 전환하는 것이며, 개발 중에는 한 세트의 페이지만 작성하면 됩니다.

본론으로 들어가겠습니다

먼저 지역화된 리소스를 관리하고 "번역" 링크를 완료하기 위해 CultureConfigurer 클래스를 만들어야 합니다.

여기서는 static 클래스를 사용한 다음 Init(MVC 프로젝트가 실행될 때)를 실행했습니다. StartUp ) 방법은 실제로 약간 어리석습니다. 물론 인터페이스를 먼저 작성한 다음 종속성 주입을 사용하여 싱글톤을 만들 수도 있습니다.

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. Assembly.Load를 사용하여 어셈블리를 로드합니다. 매개 변수는 사용자 고유의 어셈블리 이름입니다. 여기에 하나를 썼습니다

  3. 리소스 파일용으로 json 파일을 선택했습니다. js 호출의 편리함은 물론 xml 또는 사용하려는 모든 형식을 사용할 수도 있습니다. 구문 분석 방법을 조정하고 해당 Dictionary

  4에 파일 콘텐츠를 로드하기만 하면 됩니다. GetValue 메서드를 참조하세요. 사실 다국어는 어떤 언어이든지 특정 단어를 핵심으로 사용하고, 이를 현재 언어의 단어로 "번역"하기 위해 이 방법을 호출합니다. 예를 들어 "Open"이 키로 사용되는 경우 중국어 사전에 "Open": "Open"인 KeyValuePair가 있어야 하며 해당 영어에는 "Open": "Open"이 있어야 합니다. Culture가 중국어인 경우 디스플레이는 "Open"이 됩니다. 이는 영어로 "Open"을 의미합니다.

 5. 리소스 파일은 어셈블리 어디에서나 생성할 수 있습니다. 프로젝트에 project.json 파일이 있는 경우 해당 파일을 buildOptions에 추가하세요. 자신의 파일 위치에 따라 경로를 수정하세요.

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

VS2017인 경우 , csproj 파일입니다. 그런 다음 추가할 리소스 파일을 마우스 오른쪽 버튼으로 클릭하고 "Properties"을 선택하고 구성을 "모든 구성"으로 변경하고 고급 구성 속성에서 "작업 생성"을 "포함된 리소스"로 변경합니다. , 아래와 같이

이 시점에서 현지화를 구현하기 위한 핵심 클래스를 작성했습니다. 다음으로 이를 페이지에 표시하는 방법에 대한 문제를 해결해야 합니다.

새 클래스 MyRazorPage를 생성합니다. MVC 프로젝트

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")처럼 작성하면 됩니다. ​

쿠키에 사용자 언어를 저장한 것을 볼 수 있으며 여기서는 누구나 자신만의 구현 방법을 가질 수 있습니다. 내 구현 방법은 매우 간단합니다. 사용자가 언어를 전환하면 인터페이스에 액세스하고 언어를 나타내는 쿠키를 수정한 다음 페이지를 새로 고칩니다.

위 내용은 Asp.Net Core MVC 프로젝트의 다국어 구현을 위한 샘플 코드에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.