.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?}");
});
}
자원 파일 추가
자원 파일 을 추가 하려 고 합 니 다.
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"]);
}
}
코드 해석지금 프로그램 을 시작 합 니 다./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 의 검색 문자열
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-CNCookie
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 )
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AS를 통한 Module 개발1. ModuleLoader 사용 2. IModuleInfo 사용 ASModuleOne 모듈...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.