응용 프로그램에서 현지화를 구현하려고하는데 작동하지 않습니다. 제 문제는 어떻게 문화를 적절하게 설정할 수 있으며 문화 세트별로 현지화 문자열에 액세스 할 수있는 방법입니다.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);
}
자원 필터는 - 여기에서 나는 다음과 같은 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