좋아요, 내 프로젝트에서 내가하는 일을 알려 드리겠습니다. Startup.cs의 ConfigureServices 메서드에서 services.AddMvc() 뒤에 다음 코드를 입력합니다.
IList<CultureInfo> supportedCultures = new List<CultureInfo>
{
new CultureInfo("en-US"),
new CultureInfo("fr-FR"),
new CultureInfo("el-GR"),
};
var MyOptions = new RequestLocalizationOptions()
{
DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
};
MyOptions.RequestCultureProviders = new[]
{
new RouteDataRequestCultureProvider() { RouteDataStringKey = "lang", Options = MyOptions }
};
services.AddSingleton(MyOptions);
이제 기본 라우팅을 변경
프로젝트
public class LocalizationPipeline
{
public void Configure(IApplicationBuilder app, RequestLocalizationOptions options)
{
app.UseRequestLocalization(options);
}
}
에 다음 클래스를 정의 :
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{lang=en-US}/{controller=Home}/{action=Index}/{id?}");
});
사용하여 컨트롤러 각각에 대한 MiddlewareFilter에서.
[MiddlewareFilter(typeof(LocalizationPipeline))]
public class HomeController : Controller
{
public string GetCulture()
{
return $"CurrentCulture:{CultureInfo.CurrentCulture.Name}, CurrentUICulture:{CultureInfo.CurrentUICulture.Name}";
}
}
는이 같은 현재의 언어를 변경할 수 있습니다
<ul>
<li>@Html.ActionLink("EN", ViewContext.RouteData.Values["action"] as string, ViewContext.RouteData.Values["controller"] as string, new { lang = "en-US" })</li>
<li>@Html.ActionLink("FR", ViewContext.RouteData.Values["action"] as string, ViewContext.RouteData.Values["controller"] as string, new { lang = "fr-FR" })</li>
<li>@Html.ActionLink("GR", ViewContext.RouteData.Values["action"] as string, ViewContext.RouteData.Values["controller"] as string, new { lang = "el-GR" })</li>
</ul>
당신은뿐만 아니라 면도기 페이지를 지원하려면, 다음과 같이 변경합니다. 다음 변경 내용을 servcies.AddMvc() 추가하십시오.
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AddFolderRouteModelConvention("/", model =>
{
foreach (var selector in model.Selectors)
{
var attributeRouteModel = selector.AttributeRouteModel;
attributeRouteModel.Template = AttributeRouteModel.CombineTemplates("{lang=el-GR}", attributeRouteModel.Template);
}
});
});
은 PageModels
[MiddlewareFilter(typeof(LocalizationPipeline))]
public class ContactModel : PageModel
{
public string Message { get; set; }
public void OnGet()
{
Message = "Your contact page.";
}
}
내가 관리하지 않은 유일한 것은 자동으로 프로그램 내부의 MiddlewareFilter을 추가하여 모든 컨트롤러와 PageModels의 LocalizationPipeline을 정의하는 동안 다음과 같은 MiddlewareFilter 속성을 사용 Startup.cs.
[naming rules] (https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization#resource-file-naming)를 더 자세히 따라야한다고 생각합니다. 따라서 파일의 이름은'Home.ar.resx'로 지정해야합니다. – poke
@poke 나는 그것을 바꾼다 Home.ar.resx하지만 여전히 기본 (영어) 값을 얻는다. 나는 어떻게 아랍 문화를 정착시킬 수 있는가? 틀린가? 이 줄은 충분하니? System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo ("ar-AR"); // 또는 ("ar") – user1688401