0

응용 프로그램에서 현지화를 구현하려고하는데 작동하지 않습니다. 제 문제는 어떻게 문화를 적절하게 설정할 수 있으며 문화 세트별로 현지화 문자열에 액세스 할 수있는 방법입니다.ASP.NET Core 1.0에서 현지화 작업 MVC

로그인 페이지에있는 데이터베이스를 데이터베이스에서 가져 오는 드롭 다운 목록에서 문화권을 설정하려고합니다.

시작 파일

public void ConfigureServices(IServiceCollection services) 
    { 

     services.AddSqlLocalization(options => options.UseTypeFullNames = true); 

     services.AddMvc(o => 
     { 
      o.Filters.Add(new LanguageActionFilter()); 
     }) 
     .AddViewLocalization() 
     .AddDataAnnotationsLocalization() 
     .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver()); 


     services.Configure<RequestLocalizationOptions>(
      options => 
      { 
       var supportedCultures = new List<CultureInfo> 
        { 
         new CultureInfo("de-DE"), 
         new CultureInfo("en-US"), 
         new CultureInfo("de-DE"), 
         new CultureInfo("fr-FR"), 

        }; 

       options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US"); 
       options.SupportedCultures = supportedCultures; 
       options.SupportedUICultures = supportedCultures; 
      }); 

    } 

컨트롤러 코드 : - 드롭 다운 인덱스에서 전화가 아약스를 통해 변경되었습니다.

[HttpPost] 
    public IActionResult SetLanguage(string culture) 
    { 

      AppTenant tenant = HttpContext.Session.GetObjectFromJson<AppTenant>("TenantInfo"); 

      if (tenant != null) 
      { 
       tenant.LoggedInCulture = strdata[0]; 
       HttpContext.Session.SetObjectAsJson("TenantInfo", tenant); 

       string cookieFormat = "culture-name"; 
       string cookieVal = cookieFormat.Replace("culture-name", tenant.LoggedInCulture); 

       Response.Cookies.Append(
       CookieRequestCultureProvider.DefaultCookieName, 
       CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(cookieVal)), 
       new CookieOptions { Expires = DateTimeOffset.UtcNow.AddMonths(3) } 
       ); 
      } 


     List<SelectListItem> items = new List<SelectListItem>(); 
     items = HttpContext.Session.GetObjectFromJson<List<SelectListItem>>("LanguageData"); 

     foreach (var item in items) 
     { 
      if (item.Value == culture) 
      { 
       item.Selected = true; 
      } 
      else 
      { 
       item.Selected = false; 
      } 
     } 
     var viewModel = new LMS_User { ReturnUrl = string.Empty, LanguageList = items }; 

     return View("Login", viewModel); 

    } 

자원 필터는 - 여기에서 나는 다음과 같은 OnResourceExecutingOnResourceExecuted 방법으로 문화를 설정하기 위해 노력했다. 내가 OnResourceExecuting에서 현재의 드롭 다운 값을 받고 있지만 세션을 통해 OnResourceExecuted에지고 있지 않다 우리가 문화를 설정해야합니다 자원 필터에서

public void OnResourceExecuted(ResourceExecutingContext context) 
    { 
     AppTenant tenant = context.HttpContext.Session.GetObjectFromJson<AppTenant>("TenantInfo"); 

     CultureInfo.CurrentCulture = new CultureInfo(_culture); 
     CultureInfo.CurrentUICulture = new CultureInfo(_culture); 
    } 

.

내 데이터베이스 여기에 내가 그것을받지 오전 선택된 문화를 얻으려면

public class SqlStringLocalizerFactory : IStringLocalizerFactory, IStringExtendedLocalizerFactory 
{ 
public IStringLocalizer Create(Type resourceSource) 
    { 

     SqlStringLocalizer sqlStringLocalizer; 

     _culture = CultureInfo.CurrentCulture.ToString(); 
} 

에서 리소스를 잡아 당겨, ​​그것은

모든 'en-US입니다'로오고있다 SqlStringLocalizerFactory 클래스 이것에 도움이 감사!

답변

1

현재 스레드 문화권 및 UICulture 속성을 필요한 문화권으로 변경해야합니다. 당신의 SetLanguage 액션에 다음 코드를 추가하고이 문제를 해결해야합니다 작동하지 않습니다

CultureInfo cultureInfo = CultureInfo.CreateSpecificCulture(culture); 
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureInfo); 
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(cultureInfo); 
+0

없음을 .. 나는 이것은 내가에 있었을 때 나는, 현지화 작업을 처리되었습니다 어떻게이 이미 – Rohit

+0

@Rohit으로 시도 내가 해왔 던 앱의 언어를 바꿔라. 그래서 사실을 알았습니다.이 일은 끝날 것입니다. 나는 스레드에서 UICulture가 실제로 변경되었는지 확인해야한다고 생각한다. 그것이 없었던 것처럼 보입니다. – fatherOfWine

관련 문제