.NET 코어 의 현지 화 메커니즘 에 대한 심도 있 는 설명

머리말
ASP.NET Core 는 일부 현지 화 서비스 와 중간 부품 을 제공 하여 사 이 트 를 서로 다른 언어 문화 로 현지 화 할 수 있다.
ASP.NET Core 에 서 는 Microsoft.AspNetCore.Localization 라 이브 러 리 를 사용 하여 현지 화 를 실현 할 수 있 습 니 다.
.NET Core 2.0 이상 버 전에 서 는 Microsoft.AspNetCore.Localization 이 Microsoft.AspNetCore.All 에 포함 되 어 있 기 때문에 다른 라 이브 러 리 를 수 동 으로 도입 할 필요 가 없습니다.
MVC 사이트 만 들 기
ASP.NET Core 의 현지 화 를 테스트 하기 위해 서 는 먼저 Visual Studio 2017 에서 MVC 프로젝트 LocalizationSample 을 만 듭 니 다.

Startup 클래스 설정
ASP.NET Core 에서 현지 화 를 시작 하려 면 먼저 Startup 류 의 Configure Services 방법 에서 services.AddLocalization 을 사용 하여 현지 화 서 비 스 를 추가 해 야 합 니 다.

public void ConfigureServices(IServiceCollection services)
{
 services.AddLocalization(o =>
 {
 o.ResourcesPath = "Resources";
 });
 
 services.AddMvc();
}
이 방법 에서 우 리 는 번역 파일 을 저장 할 디 렉 터 리 로 폴 더 Resources 를 지정 했다.
주:번역 파일 을 저장 할 디 렉 터 리 가 지정 되 지 않 으 면 ASP.NET Core 는 기본적으로 사이트 루트 디 렉 터 리 에서 읽 습 니 다.
그리고 우 리 는 Configure 방법 에 현지 화 중간 부품 을 추가 해 야 한다.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
 app.UseStaticFiles();

 IList<CultureInfo> supportedCultures = new List<CultureInfo>
 {
 new CultureInfo("en-US"),
 new CultureInfo("zh-CN"),
 };
 app.UseRequestLocalization(new RequestLocalizationOptions
 {
 DefaultRequestCulture = new RequestCulture("en-US"),
 SupportedCultures = supportedCultures,
 SupportedUICultures = supportedCultures
 });

 app.UseMvc(routes =>
 {
 routes.MapRoute(
  name: "default",
  template: "{controller=Home}/{action=Index}/{id?}");
 });
}
  • app.UseRequestLocalization 은 app.UseMvc 이전에 설치 해 야 합 니 다
  • DefaultRequestCulture 매개 변 수 는 기본 적 인 언어 문 화 를 지정 했다.즉,사용자 가 그 어떠한 문화 도 지정 하지 않 을 때 기본 적 인 언어 문 화 를 지정 했다
  • Supported Cultures 와 Supported UI Cultures 는 현재 응용 이 지원 하 는 모든 언어 문 화 를 지정 합 니 다
  • 주:Supported Cultures 는 숫자 와 날짜 형식 을 지정 하고 Supported UICultures 가 지정 한 번역 파일 을 지정 합 니 다.
    자원 파일 추가
    자원 파일 을 추가 하려 고 합 니 다.
  • 우선 리 소스 폴 더 를 만 듭 니 다.이것 이 바로 우리 가 앞의 Startup 클래스 에서 설정 한 디 렉 터 리 이름 입 니 다
  • 그리고 우 리 는 리 소스 폴 더 에 자원 파일 을 추가 하고 Controllers.HomeController.zh-CN.resx 라 고 명명 합 니 다
  • 4.567917.이 자원 파일 에 Hello 필드 를 추가 하고 그 값 을'안녕하세요'로 설정 합 니 다
    Controller 에서 로 컬 문자열 가 져 오기
    현재 기본 생 성 된 HomeController 를 열 고 모든 action 을 비우 고 새로운 action 을 추가 합 니 다.코드 는 다음 과 같 습 니 다.
    
    public class HomeController : Controller
    {
     public HomeController()
     {
     
     }
    
     public IActionResult Hello()
     {
     return Content("Hello");
     }
    }
    프로젝트 시작 후 방문/Home/Hello 결 과 는 다음 과 같 습 니 다.

    로 컬 문자열 접근 기 를 도입 하기 위해 홈 컨트롤 러 의 코드 를 수정 합 니 다.
    
    public class HomeController : Controller
    {
     private readonly IStringLocalizer<HomeController> _localizer;
    
     public HomeController(IStringLocalizer<HomeController> localizer)
     {
     _localizer = localizer;
     }
    
     public IActionResult Hello()
     {
     return Content(_localizer["Hello"]);
     }
    }
    코드 해석
  • ISTringLocalizer 는 현지 화 문자열 접근 기의 일반적인 인터페이스 입 니 다.여기 서 우 리 는 주입 에 의존 하 는 방식 으로 HomeController 의 구조 함수 에 주입 합 니 다
  • 저 희 는 ISTringLocalizer 의 속성 접근 기 를 통 해 해당 필드 가 서로 다른 언어 에서 텍스트 를 얻 을 수 있 습 니 다
  • 최종 효과
    지금 프로그램 을 시작 합 니 다./Home/Hello 에 다시 접근 합 니 다.결 과 는 다음 과 같 습 니 다.

    결과 에 변화 가 없 음 을 발견 할 수 있 습 니 다.이것 은 기본적으로 우리 가 설정 한 언어 문화 가 en-US 이기 때 문 입 니 다.그러나 우 리 는 이전에 en-US 의 자원 파일 을 추가 하지 않 았 기 때문에 프로그램 은 방문 한 필드 이름 을 직접 출력 합 니 다.
    현재 URL 수정,방문/홈/안녕하세요?ui-culture=zh-CN,결 과 는 다음 과 같 습 니 다.

    우리 가 원 하 는'안녕하세요'가 정확하게 출력 되 었 습 니 다.이것 은 ASP.NET Core 가 Url 에서 culture 매개 변수 로 현재 사이트 에서 사용 하 는 언어 문 화 를 설정 하 는 것 을 기본 으로 지원 한 다 는 것 을 의미 합 니 다.
    자원 파일 이름
    왜 우 리 는 이전에 Controllers.HomeController.zh-CN.resx 라 는 자원 파일 을 추 가 했 습 니까?현지 화 문자열 접근 기 ISTringLocalizer 는 이 파일 을 찾 아 필드 속성 을 읽 을 수 있 습 니까?
    이것 은 ASP.NET Core 자원 파일 의 명명 약정 에 의 해 결정 된다.
    ASP.NET Core 자원 파일 의 이름 은 2 부분 으로 구성 되 어 있 습 니 다.
    프로그램 집합 이름 의 전체 클래스 이름 을 지 웁 니 다언어 문화 명칭
    앞의 예 를 들 면:
    로 컬 문자열 접근 기 인 터 페 이 스 를 만 들 었 습 니 다.일반적인 형식 은 HomeController 입 니 다.전체 유형 은 LocalizationSample.Controllers.HomeController 입 니 다.현재 프로그램 집합 이름 은 LocalizationSample 입 니 다.따라서 프로그램 집합 이름 을 지 운 후에 나머지 부분 은 Controllers.HomeController 입 니 다.culture 인자 가 zh-CN 이 라 고 설정 할 때 ASP.NET Core 에서 찾 은 자원 파일 이름 은 Controllers.HomeController.zh-CN.resx 입 니 다.이것 이 바로 우리 앞 에 추 가 된 중국어 언어 문화 자원 파일 이름 입 니 다.
    만약 당신 이 이런 방식 을 좋아 하지 않 는 다 면,ASP.NET Core 는 또 다른 자원 파일 의 조직 방식 을 제공 합 니 다.
    리 소스 디 렉 터 리 에서 다음 디 렉 터 리 구 조 를 만 들 수 있 습 니 다.
    Resources
         Controllers
              HomeController.zh-CN.resx
    로 컬 문자열 접근 기 에서 도 이 파일 을 자동 으로 찾 을 수 있 습 니 다.
    기본 언어 문화 공급 자
    ASP.NET Core 의 현지 화 미들웨어 는 기본적으로 3 가지 언어 문화 제공 기 를 지원 합 니 다.
    URL 의 검색 문자열
  • Cookie
  • 요청 헤더
    URL 의 검색 문자열
    ASP.NET Core 는 URL 에 있 는 culture 매개 변수 에서 현재 사용 하고 있 는 언어 문 화 를 가 져 옵 니 다.이것 이 바로 앞의 예 에서'안녕하세요'가 정확하게 출력 할 수 있 는 이유 입 니 다.
    ui-culture 인 자 를 지정 하 는 것 외 에 culture 인 자 를 사용 하여 현재 포맷 시간,숫자 등 사용 하 는 언어 문 화 를 지정 할 수 있 습 니 다.
    
    ?culture=zh-CN&ui-culture=zh-CN
    
    ?culture=zh-CN
    
    ?ui-culture=zh-CN
    Tips:culture 나 ui-culture 인자 만 지정 하면 ASP.NET Core 는 culture 와 ui-culture 를 자동 으로 똑 같이 설정 합 니 다.즉?culture=zh-CN 은?culture=zh-CN&ui-culture=zh-CN
    Cookie
    ASP.NET Core 에 서 는 현재 사용 중인 언어 문 화 를 쿠키 로 설정 하 는 방식 도 지원 한다.기본적으로 사용 하 는 쿠키 이름 은.AspNetCore.Cuture 입 니 다.
    .AspNetCore.culture 의 값 형식 은 다음 과 같 습 니 다.
    
    c=zh-CN|uic=zh-CN
    
    c=zh-CN
    
    uic=zh-CN
    그 중에서 c 는 culture 를 나타 내 고 uic 는 ui-culture 를 나타 낸다.
    현재 웹 페이지 에 언어 문화 쿠키 를 추가 하기 위해 Chrome 개발 자 도 구 를 사용 합 니 다.

    그리고 우 리 는 방문/Home/Hello,"안녕하세요"도 정확하게 출력 되 었 습 니 다.

    이 는 ASP.NET Core 가 쿠키 에서 언어 문화 설정 을 읽 었 다 는 뜻 이다.
    요청 헤더
    URL 검색 문자열 과 Cookie 외 에 도 ASP.NET Core 는 요청 헤더 에 언어 문 화 를 지정 할 수 있 습 니 다.요청 헤더 의 언어 문화 필드 이름 은 Accept-language 입 니 다.
    Accept-language 의 문서,참조https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Accept-Language
    여기 서 우 리 는 Postman 을 사용 하여 테스트 합 니 다.우 리 는 Accept-language 를 zh-CN,zh 로 설정 합 니 다.q=0.9,결 과 는 다음 과 같다.

    어떻게 View 에서 현지 화 를 사용 합 니까?
    Controller 를 제외 하고 우 리 는 View 에서 현지 화 를 사용 합 니 다.
    View 에서 로 컬 화 를 사용 하려 면 먼저 Startup 류 의 Configure Services 방법 에서 View 로 컬 화 를 사용 해 야 합 니 다.
    
    public void ConfigureServices(IServiceCollection services)
    {
     services.AddMvc()
      .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);
    }
    여기 LanguageView LocationExpander Format 은 두 가지 방식 을 지원 합 니 다.이것 은 앞의 Controller 의 현지 화 파일 이름 과 유사 합 니 다.
    Suffix,예/Resource/Home/Hello.zh-CN.resx경로,예/리 소스/홈/zh-CN/Hello.resx홈 컨트롤 러 의 코드 를 수정 합 니 다.Hello 방법 은 View 로 돌아 갑 니 다.
    HomeController
    
    public IActionResult Hello()
    {
     //return Content(_localizer["Hello"]);
     return View();
    }
    Hello.cshtml
    
    @{
     ViewData["Title"] = "Hello";
    }
    
    <h2>Good Bye</h2>
    다음 그림 과 같은 디 렉 터 리 구 조 를 만 들 고 자원 파일 Hello.zh-CN.resx 를 만 들 고 GoodBye 필드 를 추가 합 니 다.값 은"안녕"입 니 다.


    ViewLocalizer 사용 하기
    ViewLocalizer 클래스 는 Razor 보기에 서 로 컬 텍스트 를 사용 하 는 데 도움 을 줄 수 있 습 니 다.현재 Hello.cshtml 를 수정 하고 파일 에 현지 화 인용 을 추가 하 며 ViewLocalizer 대상 을 주입 합 니 다.
    
    @using Microsoft.AspNetCore.Mvc.Localization
    
    @inject IViewLocalizer Localizer
    @{
     ViewData["Title"] = "Hello";
    }
    
    <h2>@Localizer["GoodBye"]</h2>
    이 곳 에서 우 리 는 ViewLocalizer 를 사용 하여 현지 화 텍스트 를 읽 었 습 니 다.그것 의 용법 은 ISTringLocalier 와 마찬가지 로 속성 접근 기 를 통 해 해당 필드 의 현지 화 텍스트 에 접근 합 니 다.
    최종 효과
    현재 프로그램 을 실행 하고/Home/Hello 에 접근 합 니 다.결 과 는 다음 과 같 습 니 다.

    그리고 우 리 는 계속 방문/Home/Hello?ui-culture=zh-CN,결 과 는 다음 과 같 습 니 다.

    로 컬 문자열 읽 기 성공
    원본 코드 ( https://github.com/lamondlu/aspnetcore_localizationsample
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기