Dotnet 핵심 현지화

다국어 지원서를 작성해야 했습니다. 언어가 많고 더 많은 고객을 위해 글로벌화를 원할 수 있기 때문입니다. 현지화 전에 간단한 예제를 작성하고 싶었습니다. 나는 문서를 읽고 조금 혼란스러워했습니다. 그런 다음 샘플 코드를 공유하고 싶었습니다.

리소스 파일에 텍스트 메시지를 저장할 수 있습니다. 리소스 레코드는 두 부분으로 구성됩니다. 이름과 값. 사실 이 부분(댓글)이 하나 더 있는데 아마 이 부분은 안 쓰실 것 같습니다.

다음과 같은 예제 리소스 파일:



다른 언어에 대한 리소스 파일을 만들 수 있습니다.
Resource.resx, Resource.de.resx, Resource.es.resx 등

현지화를 제대로 적용하려면 리소스 파일의 이름이 동일해야 합니다. 로컬라이저가 리소스 콘텐츠를 찾지 못하면 null을 반환합니다. 이 프로젝트를 단계별로 설명하겠습니다. https://github.com/emreerkoca/LocalizationExample 간단한 Dotnet Core Web Api 프로젝트입니다.
  • 프로젝트에 리소스 폴더를 추가합니다.
  • 리소스 파일을 추가합니다.


  • 프로젝트에 새 폴더를 "Localize"로 추가하고 공용 클래스를 Localize 폴더에 추가합니다.

  • namespace LocalizationExample.Localize
    {
        public class Resource
        {
        }
    }
    

    원하는 경우 다른 이름을 사용할 수 있지만 리소스 이름과 리소스가 적합해야 합니다. 이 빈 클래스를 통해 리소스 콘텐츠에 도달하게 됩니다.

    리소스 이름: Localize.Resource.de.resx
    클래스의 네임스페이스는 LocalizationExample.Localize이고 클래스 이름은 Resource.cs입니다.
  • 시작 구성

  • 이 코드 블록을 Startup.cs 파일의 boldConfigureServices(IServiceCollection services)bold 메서드에 추가합니다.

    services.AddLocalization(options =>
    {
        options.ResourcesPath = "Resources";
    });
    
    services.Configure<RequestLocalizationOptions>(options =>
    {
        var supportedCultures = new[]
        {
            new CultureInfo("en-US"),
            new CultureInfo("de")
        };
    
        options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");
        options.SupportedCultures = supportedCultures;
        options.SupportedUICultures = supportedCultures;
    });
    


    로컬라이저에 지원되는 언어를 추가하는 것입니다. 리소스 파일을 표시합니다. 기본 언어를 선택합니다.

    이 코드 블록을 boldConfigure(IApplicationBuilder app, IWebHostEnvironment env)bold 메서드에 추가합니다.

    var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
    app.UseRequestLocalization(locOptions.Value);
    


    로컬라이저의 문화 정보를 자동으로 설정하기 위한 것입니다. 모든 요청 헤더 값으로 문화 정보를 설정할 수 있습니다.
  • 현지화된 메시지 표시

  • 리소스 파일에 도달하기 위해 IStringLocalizer 인터페이스를 사용했습니다. 여기에서 사용 예를 볼 수 있습니다. 종속성을 추가하고 리소스 필드 이름을 호출합니다.

    private readonly IStringLocalizer<Resource> _stringLocalizer;
    
    public HomeController(IStringLocalizer<Resource> stringLocalizer)
    {
        _stringLocalizer = stringLocalizer;
    }
    
    [HttpGet]
    public string Get()
    {
        var value = _stringLocalizer["Hello"];
    
        return value;
    }
    


    Get() 메서드는 "Hello!"를 반환합니다. 영어가 기본 문화권이고 영어 리소스 값이 "Hello!"이기 때문입니다. 요청 URL에 "culture=de"를 추가하면 culture가 "de"로 변경되고 "Hallo!"가 표시됩니다. 메시지.

    원하는 경우 "Accept-Language"헤더에서 현재 언어를 감지할 수 있습니다. 구성을 변경할 수 있습니다.

    다음과 같이 ConfigureServices 구성 부분을 변경합니다.

     public void ConfigureServices(IServiceCollection services)
     {
         services.AddControllers();
    
         services.AddLocalization(options =>
         {
             options.ResourcesPath = "Resources";
         });
    
         services.Configure<RequestLocalizationOptions>(options =>
         {
             var supportedCultures = new[]
             {
                 new CultureInfo("en-US"),
                 new CultureInfo("de")
             };
    
             options.SupportedCultures = supportedCultures;
             options.SupportedUICultures = supportedCultures;
    
             options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context =>
             {
                 var languages = context.Request.Headers["Accept-Language"].ToString();
                 var currentLanguage = languages.Split(',').FirstOrDefault();
                 var defaultLanguage = string.IsNullOrEmpty(currentLanguage) ? "en-US" : currentLanguage;
    
                 if (defaultLanguage != "de" && defaultLanguage != "en-US")
                 {
                     defaultLanguage = "en-US";
                 }
    
                 return Task.FromResult(new ProviderCultureResult(defaultLanguage, defaultLanguage));
             }));
         });
     }
    


    "Accept-Language"헤더 값을 읽고 기본 언어를 가져옵니다. 언어 변수 뒤에 중단점을 놓고 값을 확인합니다. 다른 브라우저 언어로 변경할 수 있습니다. CustomRequestCultureProvider, ProviderCultureResult 등을 읽을 때 혼란스럽다면 공식 Microsoft 문서에서 읽을 수 있습니다.

    이제 요청 URL에 culture 매개변수를 추가할 필요가 없습니다. 영어 및 독일어 브라우저에서 값을 가져올 수 있습니다.

    자세한 내용은 이 문서를 참조하십시오.
    https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-5.0

    이 후 할 말이 없습니다. 도움이 되었기를 바랍니다.

    좋은 웹페이지 즐겨찾기