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);
}
資源篩選: - 在這裏,我試圖設置文化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);
}
在我們應該在哪裏設置的文化我不是OnResourceExecuting
獲得當前下拉值,而是通過會議得到在OnResourceExecuted
資源過濾器。
我SqlStringLocalizerFactory
類,其中來自數據庫
public class SqlStringLocalizerFactory : IStringLocalizerFactory, IStringExtendedLocalizerFactory
{
public IStringLocalizer Create(Type resourceSource)
{
SqlStringLocalizer sqlStringLocalizer;
_culture = CultureInfo.CurrentCulture.ToString();
}
在這裏,我想選擇的文化,這是我沒有得到它拉的資源,它是未來的「EN-US」
任何對此表示讚賞!
號。我已經嘗試了這個已經 – Rohit
@Rohit這是我一直在處理本地化的任務,當我不得不切換我一直在努力的應用程序的語言。所以我知道這個事實,這樣做的工作將會完成。我認爲你需要確保一個線程上的UICulture實際上已經改變了。它看起來沒有。 – fatherOfWine