2011-10-16 1 views
2

MVC 3 (면도기)에 프로젝트가 있습니다. 현지화를 위해 강력한 형식의 리소스를 사용하고 있습니다. "온라인"으로 번역 된 번역본을 업데이트 할 수 있습니다. 즉, 웹 사이트에서 번역을 편집 할 수 있어야합니다. (예 : url에 "translateLanguage = on"과 같은 매개 변수가있는 경우) 기본적으로 현재 솔루션에서는이를 수행 할 수 없습니다. 리소스가 변경된 경우 다시 컴파일해야하기 때문입니다.ResourceManager 변경 (업데이트 가능)

물론 우리는 데이터베이스를 사용할 자체 리소스 관리자를 작성할 수 있습니다. 그렇지만 모든 번역을 데이터베이스로 다시 작성해야만하고 시간이 오래 걸릴 것입니다. 또한이 "새로운"자원 관리자를 반영하기 위해 모든 코드를 변경해야한다는 것을 의미합니다.

모든 일에서 그것을 구현하는 것은 어려울 것입니다. 이제 예를 들어 속성에 사용할 수 있습니다.

[Required(ErrorMessageResourceType = typeof(_SomeResource), ErrorMessageResourceName = "SomeResouceElement") 
    SomeProperty 

뿐만 아니라 코드의 :

string translatedResource = _SomeResource.SomeResourceElement; 

당신이 날은 MVC 3에서이 작업을 수행하는 방법을 몇 가지 정보를 제공 할 수 있을까요?

+0

질문을 명확히하십시오 : 무엇이 문제입니까? 어떤 주제에 정보가 필요합니까? 그 속성은 어떻습니까? – PVitt

+0

결론적으로, 코드 변경이 필요하지 않은 방식으로 기본 Resource Manager를 변경해야합니다 (웹 응용 프로그램에서 자원 관리자 사용시). 모든 코드가 현재 그대로 코딩됩니다 (물론 Resource Manager 임펠 멘션은 제외). 역동적 인 리소스 변경이 가능할 것입니다. (사전 컴파일되지 않고 어셈블리에 포함되지 않습니다.) – Piter

+0

누구든지?> 어려운 문제이지만 모든 단서가 가치 있다는 것을 알고 있습니다. MVC를 사용하여 "온라인"으로 번역을 변경할 수 있어야합니다. O – Piter

답변

2

일반적으로 리소스 파일은 xml + autogenerated cs 코드의 두 부분으로 구성됩니다. 당신이

/// <summary> 
     /// Looks up a localized string similar to About project. 
     /// </summary> 
     public static string about_project { 
      get { 
       return ResourceManager.GetString("about_project", resourceCulture); 
      } 
     } 

을 볼 수 열고 자원 디자이너 파일 경우에 당신은 당신이 ResourceManager.GetString ("키")를 사용할 수 있습니다 할 수

Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName); 
      var t = Resources.ResourceManager.GetResourceSet(new CultureInfo(cultureName), true, true); 

는 더 똑똑한 당신이 BaseView

를 다시 작성할 수 있습니다하려면 그래서
public abstract class ViewBase<TModel> : System.Web.Mvc.WebViewPage<TModel> 
{ 
    public string GetTranslation(string key) 
    { 
     return _rManager.GetString(key); 
    } 

    private ResourceManager _rManager; 
    protected ViewBase() 
    { 
     _rManager = Resources.ResourceManager.GetResourceSet(new CultureInfo(cultureName), true, true); 
    } 


} 

그리고 당신이 당신의 면도기보기 GetTranslation를 사용할 수 있습니다

,369 (당신이보기 폴더의 web.config를 수정해야이 기본보기를 실행하려면)

그러면 자원 데이터에 대한 xml 액세스를 편집 할 수 있습니다.

+0

유감스럽게도 강하게 입력 된 리소스에 대한 참조가 있으므로 @ Piter의 문제는 해결되지 않습니다. '_SomeResource.SomeResourceElement' – polkduran

+0

@polkduran 그럼에도 불구하고 각 시간마다 다시 작성해야하기 때문에 해결이 불가능하지만 문자열을 사용할 수 있으면 thenGetTranslation ("SomeResourceElement")이 작동합니다 –