2013-03-16 3 views
0

저는 웹 사이트 프로젝트를 진행하고 있으며 프로젝트를 국제화해야합니다. 이제 리소스 파일을 사용합니다.i18n asp.net mvc4 속성?

가한다고 가정 내 DB에 이미 클래스의 세리가, 각 클래스가 있습니다

내가 모든 것을 almos 이미 국제화, 그러나 한 가지 내가 수행하는 방법을 알고 싶습니다 느릅 나무에서 등장하는 것은 이것이다 설명이라는 문자열 속성 로캘 브라우저를 기반으로 설명을 표시하는 방법이 있습니까? 나는 브라우저를 영어로 사용하고 설명을 영어로 표시하지만 프랑스어로 변경하고 프랑스어로 설명을 표시합니까? (각 설명에 "숫자"값을 할당 한 다음 리소스 파일에 1 : Human Resources, 2 : IT, 3 : HealthCare 등이 있고 각각의 값을 가진 french에 대한 다른 파일이 있지만 그것은

가 설명 텍스트가 상수임을 감안

답변

1

그럼 당신에게 대단히 감사합니다) 엉망의 일종이라고 생각 당신은 당신의 DB에 각각의 텍스트 변환 키를 쓸 수 없습니다 다음 일치를 얻을 수 번역 파일의 (현지화 된) 값이 있습니까? DB를 변경할 수 없다면 DB의 기존 값을 번역 파일의 키로 사용하고 해당 번역에 매핑하면됩니다. 공백 등을 제거해야 할 수도 있지만 큰 문제는 아닙니다.

Human Resources 
Health Care 
... 

번역 파일 예 :

영어 :

Human_Resources | Human Resources 
Health_Care  | Health Care 
... 

프랑스어 :

Human_Resources | Service du personnel 
... 

번역 된 값 (의사를) 가져 오는 : 당신의 DB에서

var translationKey = descriptionValueFromDB.Replace(' ', '_'); 
var translatedDescription = ResourceManager.GetString(translationKey); 

어떻게 생각하십니까?

환호, 알렉스

UPDATE : 뷰 내에서 번역 된 문자열을 표시 은 간단 표준 기술을 사용하고 있습니다. 당신이보기에 데이터를 제공하기 위해 모델 객체를 사용하고 있다고 가정합니다. 그럼 당신은 예를 들어 모델에 기성품 번역을 작성하고 뷰 내에서 사용할 수 : 만약 당신이 좋아하면, 물론

public class FooModel 
    { 
     public string Description {get; set;} 
     public string TranslatedDescription 
     { 
     get { return Description.ToTranslationKey().Translate(); } 
     } 
    } 

    public static class TranslationExtensions 
    { 
     public static string ToTranslationKey(this string term) 
     { 
     if (string.IsNullOrEmpty(term)) 
      return term; 

     return term.Replace(' ', '_'); 
     } 

     public static string Translate(this string term) 
     { 
     if (string.IsNullOrEmpty(term)) 
      return term; 

     return ResourceManager.GetString(term); 
     } 
    } 

<div id="fooDescription">@Model.TranslatedDescription</div> 

, 당신은 또한, 뷰에 번역 부분을 움직일 수 더 나은 그 :

<div id="fooDescription">@Model.Description.ToTranslationKey().Translate()</div> 

Mkay?

+0

나는 당신의 생각이 맘에 든다. 그러나 나는 면도기로 어떻게 다뤄야할지 모른다. 내가 생각할 수있는 유일한 방법은 컨트롤러에서 객체 속성을 바꾸는 것입니다. 객체를 덮어 쓰는 것이 좋을 것이라고 생각하지 않습니다. 보기에서 어떻게 할 수 있습니까? 감사합니다 –

+0

가능한 접근을위한 샘플 코드를 추가했습니다. –