私はアプリケーションでローカリゼーションを実装しようとしていますが、動作させることができません。私の問題は、どのようにして文化を適切に設定することができ、どのように文化設定ごとにローカライズ文字列にアクセスできるかです。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);
}
リソースフィルター: - ここで私がフォローようOnResourceExecuting
とOnResourceExecuted
方法で文化を設定しようとしています。私は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
クラスは、これで助けてください!
ません..私はこのすでに – Rohit
で試してみました@Rohitこれは私が持っていたとき、私は、ローカライズ作業を扱ってきた方法です私が取り組んでいるアプリの言語を切り替えてください。だから、私は事実を知っている、このような仕事が行われるだろう。私はスレッド上のUICultureが実際に変更されたことを確認する必要があると思います。それはなかったように見えます。 – fatherOfWine