내 목표는 여러 언어를 지원하는 API를 만드는 것입니다.API 작업에서 반복 코드 피하기는하지만 여전히 다중 언어 지원
내가 각 작업에
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
, 난 그 피할 수 가정 뭔가를 호출 할 경우에만 있지만, 노력하고 있습니다.
는 WebApiConfig.cs 파일에 나는 기본 경로 "{lang}/api/{controller}/{id}"
전에 언어를 배치, 여러 언어를 지원하기 위해 경로를 만들었습니다. 즉, 영어로는 을 이라고 부르면 http://localhost/en/api/service/get
으로 전화 할 수 있습니다.
WebApiConfig.cs : 내 행동에
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApiLocalized",
routeTemplate: "{lang}/api/{controller}/{id}",
constraints: new { lang = @"(\w{2})|(\w{2}-\w{2})"}, // en or en-US
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
나는 언어를 수신하고 문화를 변경하는 데 사용합니다.
ServiceController.cs
내가 http://localhost/en/api/service/get
또는 http://localhost/pt/api/service/get
내가 완벽하게 작동, 각각의 언어로 문자열을 얻을 전화
public class ServiceController : ApiController
{
[HttpGet]
public string Get(string lang)
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
return Resources.Global.Country;
}
}
.
어떻게 모든 작업에
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
을 사용하지 않도록 할 수 있습니까?
어디에서 코드에 쓸 수 있지만 여전히 필요한 lang
인수가 있습니까?
- 그
lang
인수를 얻을 나는 Global.asax.cs을 시도했지만, 내가 할 수있는 (방법) 나도 몰라. - 나는 그것을 (그리고 어떻게) 넣을 수 있는지 모르겠다. WebApiConfig.cs.
검색어 매개 변수가 아닌 URL에 언어를 사용하려는 이유는 무엇입니까? 후자는 나에게 더 깨끗한 옵션처럼 느껴진다. 물론 요청의 기존 헤더에서 가져 가라. –
다시 한번 살펴보면, 귀하의 질문은 라우팅에 관한 것이 아니라 "실제로 특정 언어에 대한 리소스를 얻는 방법"에 관한 것입니다. 관련없는 라우팅 부분을 제거하는 것이 도움이됩니다. –
'Resources.Global'의 유형을 표시하면 도움이 될 것입니다.내 생각 엔 특정 문화권의 문자열을 가져올 수있는'ResourceManager' 속성을 가진 생성 된 클래스라는 것입니다. –