2011-04-28 3 views
3

안녕하세요, 저는 두 개 이상의 언어를 지원하고 다른 국가의 UI를 다루는 데 필요한 mvc 응용 프로그램을 작성하고 있습니다. 언어 및 포털에 대한 사용자 선택을 저장하기위한 최선의 방법에 대한 지침을 받고 싶습니다. I've은 읽고 그것을 보인다 :국제화 mvc3 - 이것이 최선의 접근 방법입니까? 세션, 쿠키?

그것은 영구적 인 데이터로 그 값을 읽는 쿠키에 저장하고 일부 값이
  • 그들이에서 정보를 설정하는 것을 선호하는 또 다른 경우가 변경 될 때 그 쿠키를 다시 할 수
    • 세션의 httpcontext.
    • 다른 접근법은 로켈 선택을 고려하여 데이터를 변경하기 위해 기본 컨트롤러를 사용합니다.

    어떤 아이디어라도, 찬성하겠습니다. 미리 감사드립니다. brgds.

  • 답변

    2

    나는이 schema을 사용했으며 만족 스럽습니다.

    경로에 언어가 있습니다. 이 편리한 것으로 밝혀졌습니다 : 귀하가 선택하는 언어가있는 페이지로 연결되는 링크를 이메일로해야합니다 어느 시점에서

    • SEO
    • 개발과 번역 과정에서 언어 간 전환이 용이 당신이 URL에 언어를 정의 할 수 있습니다 경우로드 밸런서와
    • 아무런 문제
    • 프론트 엔드 테스트는보다 안정적 없습니다
    +0

    좋아요, url이 국제화의 요점을 자세히 설명하는 것 같습니다. 정말 고맙습니다.! sebasitan. –

    +0

    @Malcom_Frexner하지만 글로벌 asax에서 유일한 경로를 사용하고 있습니까? –

    1

    세션/쿠키는 good for this purpose입니다.

    +0

    하이 대린를, 정말 고맙습니다. 이 접근법을 처리하기위한 권장 사항 또는 자습서저는 언어뿐 아니라 한 번만 선택할 수있는 사실을 기반으로 국가를 선택할 수 있다는 것을 고려하여 응용 프로그램에서 사용자 선택 데이터를 유지할 수있는 방법에 대부분 관심이 있습니다. brgds! –

    +0

    @sebastian_h, 내 답변에 링크를 따라 갔습니까? –

    +0

    uauu, 아니요. 텍스트처럼 읽습니다. 죄송합니다. @Darin_Dimitrov : S. 나는 과거에 그의 글을 읽었고, 심지어 하이는 그 접근법을 사용하지 말고 http://adamyan.blogspot.com/2010_07_01_archive.html 라우트에 초점을 맞춘 대신 새로운 것을 게시했다. URL 생성 및 현서 문제. 나는 그것을 다시 읽을 것이다. 감사합니다 –

    2

    내가 열거 형의 국제화 또는 각각의 리소스 파일에서 열거 형의 점점 텍스트에 발견 된 접근 방식하여 GetString 및 GetStrings에 대한 확장 방법을 제공합니다 다른 정적 클래스를 만듭니다 DescriptionAttribute 클래스

    public class EnumResourceAttribute : DescriptionAttribute 
    { 
    
        public Type ResourceType { get; private set; } 
        public string ResourceName { get; private set; } 
        public int SortOrder { get; private set; } 
        public EnumResourceAttribute(Type ResourceType, 
             string ResourceName, 
             int SortOrder) 
        { 
    
         this.ResourceType = ResourceType; 
         this.ResourceName = ResourceName; 
         this.SortOrder = SortOrder; 
        } 
    } 
    

    를 상속하여 속성 클래스를 만드는 것입니다.

    public enum Priority 
    { 
         [EnumResourceAttribute(typeof(Resources.AdviceModule), Resources.ResourceNames.AdviceCreateAdviceExternaPriorityMemberHigh, 1)] 
         High, 
         [EnumResourceAttribute(typeof(Resources.AdviceModule), Resources.ResourceNames.AdviceCreateAdviceExternaPriorityMemberRoutine, 2)] 
         Routine 
    } 
    

    어디 Resources.ResourceNames.AdviceCreateAdviceExternaPriorityMemberHigh & Resources.ResourceNames.AdviceCreateAdviceExternaPriorityMemberRoutine 리소스 파일에서 상수 또는 당신은 그 값이 문자열이 다른 문화에서 사용할 수 있습니다 말할 수 있습니다 :

    public static class EnumHelper 
    { 
        public static string GetString(this Enum value) 
        { 
         EnumResourceAttribute ea = 
         (EnumResourceAttribute)value.GetType().GetField(value.ToString()) 
         .GetCustomAttributes(typeof(EnumResourceAttribute), false) 
         .FirstOrDefault(); 
         if (ea != null) 
         { 
          PropertyInfo pi = ea.ResourceType 
          .GetProperty(CommonConstants.ResourceManager); 
          if (pi != null) 
          { 
           ResourceManager rm = (ResourceManager)pi 
           .GetValue(null, null); 
           return rm.GetString(ea.ResourceName); 
          } 
    
         } 
         return string.Empty; 
        } 
    
    
        public static IList GetStrings(this Type enumType) 
        { 
         List<string> stringList = new List<string>(); 
         FieldInfo[] fiArray = enumType.GetFields(); 
         foreach (FieldInfo fi in fiArray) 
         { 
          EnumResourceAttribute ea = 
           (EnumResourceAttribute)fi 
            .GetCustomAttributes(typeof(EnumResourceAttribute), false) 
            .FirstOrDefault(); 
          if (ea != null) 
          { 
           PropertyInfo pi = ea.ResourceType 
                .GetProperty(CommonConstants.ResourceManager); 
           if (pi != null) 
           { 
            ResourceManager rm = (ResourceManager)pi 
                  .GetValue(null, null); 
            stringList.Add(rm.GetString(ea.ResourceName)); 
           } 
          } 
         } 
         return stringList.ToList(); 
        } 
    } 
    

    그리고 당신의 열거의 요소에

    당신은 쓸 수 있습니다 .

    당신이 다음 속성

    private IList result; 
    public IList Result 
         { 
          get 
          { 
           result = typeof(Priority).GetStrings(); 
           return result; 
          } 
         } 
    

    하고 .cshtml 파일에 방금처럼 드롭 다운리스트에 열거를 바인딩 할 수 있습니다 만들 MVC 아키텍처에서 웹 응용 프로그램을 구현하는 경우 :

    @Html.DropDownListFor(model => Model.vwClinicalInfo.Priority, new SelectList(Model.Result)) 
    
    +0

    위대한 정보 @swati 나는 당신의 해결책을 시도 할 것입니다. brgds! –

    관련 문제