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; 
      }); 

    } 

コントローラー・コード: - ドロップダウンインデックスからの呼び出しは、AJAXを介して変更しました。

[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

関連する問題