지역화 확장성
참고 항목
이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.
Important
이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.
현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.
작성자: Hisham Bin Ateya
이 문서의 내용:
- 지역화 API의 확장 지점이 나열됩니다.
- ASP.NET Core 앱 지역화를 확장하는 방법에 대한 지침을 제공합니다.
지역화 API의 확장점
ASP.NET Core 지역화 API는 확장 가능하도록 빌드됩니다. 확장성을 통해 개발자는 필요에 따라 지역화를 사용자 지정할 수 있습니다. 예를 들어 OrchardCore에는 POStringLocalizer
가 있습니다. POStringLocalizer
에서는 PO
파일을 사용하여 지역화 리소스를 저장하는 데 이식 가능 개체 지역화를 사용하는 데 관한 자세한 내용을 설명합니다.
이 문서에는 지역화 API에서 제공하는 두 가지 주요 확장 지점이 나열되어 있습니다.
지역화 문화권 공급자
ASP.NET Core 지역화 API에는 실행 요청의 현재 문화권을 확인할 수 있는 네 가지 기본 공급자가 있습니다.
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
- CustomRequestCultureProvider
위의 공급자는 지역화 미들웨어 문서에 자세히 설명되어 있습니다. 기본 공급자가 요구 사항을 충족하지 않으면 다음 방법 중 하나를 사용하여 사용자 지정 공급자를 빌드합니다.
CustomRequestCultureProvider 사용
CustomRequestCultureProvider에서는 단순 대리자를 사용하여 현재 지역화 문화를 판별하는 사용자 지정 RequestCultureProvider를 제공합니다.
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
{
var currentCulture = "en";
var segments = context.Request.Path.Value.Split(new char[] { '/' },
StringSplitOptions.RemoveEmptyEntries);
if (segments.Length > 1 && segments[0].Length == 2)
{
currentCulture = segments[0];
}
var requestCulture = new ProviderCultureResult(currentCulture);
return Task.FromResult(requestCulture);
}));
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
{
var currentCulture = "en";
var segments = context.Request.Path.Value.Split(new char[] { '/' },
StringSplitOptions.RemoveEmptyEntries);
if (segments.Length > 1 && segments[0].Length == 2)
{
currentCulture = segments[0];
}
var requestCulture = new ProviderCultureResult(currentCulture);
return Task.FromResult(requestCulture);
}));
RequestCultureProvider의 새 구현 사용
사용자 지정 소스에서 요청 문화 정보를 판별하는 RequestCultureProvider의 새 구현을 만들 수 있습니다. 예를 들어 사용자 지정 소스는 구성 파일 또는 데이터베이스일 수 있습니다.
다음 예제는 RequestCultureProvider를 확장하여 appsettings.json
에서 요청 문화권 정보를 확인하는 AppSettingsRequestCultureProvider
를 보여 줍니다.
public class AppSettingsRequestCultureProvider : RequestCultureProvider
{
public string CultureKey { get; set; } = "culture";
public string UICultureKey { get; set; } = "ui-culture";
public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException();
}
var configuration = httpContext.RequestServices.GetService<IConfigurationRoot>();
var culture = configuration[CultureKey];
var uiCulture = configuration[UICultureKey];
if (culture == null && uiCulture == null)
{
return Task.FromResult((ProviderCultureResult)null);
}
if (culture != null && uiCulture == null)
{
uiCulture = culture;
}
if (culture == null && uiCulture != null)
{
culture = uiCulture;
}
var providerResultCulture = new ProviderCultureResult(culture, uiCulture);
return Task.FromResult(providerResultCulture);
}
}
지역화 리소스
ASP.NET Core 지역화에서는 ResourceManagerStringLocalizer를 제공합니다. ResourceManagerStringLocalizer는 resx
를 사용하여 지역화 리소스를 저장하는 IStringLocalizer의 구현입니다.
resx
파일만 사용하도록 제한되지 않습니다. IStringLocalizer
를 구현하여 모든 데이터 소스를 사용할 수 있습니다.
다음 예제 프로젝트에서는 IStringLocalizer를 구현합니다.
ASP.NET Core