c# - Asp.net Mvc, 면도기 및 현지화



asp.net-mvc resources (2)

HTML 파일을 리소스 파일에 저장하지 @Html.Raw(MyResources.Resource) 한 다음 @Html.Raw(MyResources.Resource) 를 호출합니다.

나는이 문제가 이미 여러 번이 페이지들에 제기되어 왔음을 알고 있지만, 아직도 나는 찾아야하는 "좋은 해결책"을 발견하지 못했다. 설명을 시작합시다.

.net 및 mvc의 현지화는 서로 섞을 수도있는 두 가지 방법으로 이루어집니다.

  • 리소스 파일 (로컬 또는 글로벌)
  • viewengine이있는 현지화 된보기로 문화에 따라 적절한보기 호출

나는 시도한 해결책과 내가 가진 모든 문제를 설명 할 것이다.

리소스 파일의 텍스트,보기의 모든 태그

이 솔루션을 사용하면 리소스의 모든 텍스트와 뷰의 모든 태그, [strong] 또는 [span]과 같은 인라인 태그를 넣을 수 있습니다.

장점 :

  • 깨끗한 분리, 어떠한 구조화도 현지화되지 않았습니다.
  • 쉬운 인코딩 : 리소스에서 반환되는 모든 내용이 html로 인코딩됩니다.

단점 :

  • 내가 강점이있는 단락이 있다면 링크 몇 개를 여러 리소스 키로 분할해야합니다. 이것은보기를 너무 읽을 수 없게 만드는 것으로 간주되고 또한보기를 만들기에는 너무 많은 시간이 걸립니다.
  • 위와 같은 이유에서 두 가지 언어로 된 [strong] 텍스트가 다른 장소 (예 : "Il cane di Marco"및 "Marcos 's dog ")에있는 경우 모든 태그가 전망.

매개 변수를 통해 리소스 파일의 텍스트 및 인라인 태그

이 메서드는 리소스에 string.Format의 일부 자리 표시자를 포함하게되며 이러한 자리 표시자는 인라인 태그로 인코딩됩니다.

장점 :

  • 텍스트에서 자리 표시자를 사용하여 명확한 분리가 이루어 지므로 [강함]을 [엠]로 바꿀 수 있다면 매개 변수로 전달하는보기에서 수행하고 모든 언어로 바뀝니다.

단점 :

  • 인코딩은 조금 더 어렵습니다. 리소스에서 값을 미리 인코딩 한 다음 string.Format을 사용하고 마침내 MvcHtmlString으로 반환하여 뷰 엔진에 표시 할 때 다시 인코딩하지 않도록 지시해야합니다.
  • 예를 들어 매개 변수로 ActionLink를 포함하여 위와 같은 이유로 인해 문제가 될 수 있습니다. 리소스에서 내 액션 링크의 텍스트를 가져옵니다. 내 메서드는 이미 그것을 인코딩합니다. 그런 다음 ActionLink 메소드가이를 다시 인코딩합니다. 인코딩하지 않고 리소스를 얻으려면 고유 한 메서드가 필요하거나 텍스트 매개 변수로 문자열 대신 MvcHtmlString을 가져 오는 새로운 도우미 메서드가 필요하지만 두 방법 모두 모두 비현실적입니다.
  • 보기를 빌드하고 모든 리소스 키를 작성한 다음 채우는 데 많은 시간이 걸립니다.

현지화 된보기

장점 :

  • 모든보기는 일반 html입니다. 읽을 리소스가 없습니다.

단점 :

  • 어디에서나 중복 된 html. 나는 이것이 어떻게 완전히 나쁜 것인지를 설명 할 필요조차 없다.
  • 무덤 모음, 따옴표 등 모든 문제가있는 문자를 수동으로 인코딩해야합니다.

결론

위 techinques의 혼합 장단점을 상속하지만 여전히 좋지 않아. 위의 모든 것이 "비실용적"이고 "시간이 많이 소요되는"것으로 간주되는 동안 나는 적절한 생산적 해결책을 찾아야합니다.

상황을 악화시키기 위해 aspx 또는 cshtml (또는 심지어 html) 뷰 / 페이지에서 리소스로 리팩터링하는 "텍스트"라는 단일 도구가 없다는 것을 알게되었습니다. 거기에있는 모든 도구는 코드 파일 (.cs 또는 .vb)의 System.String 인스턴스를 리소스로만 리팩토링 할 수 있습니다 (예 : resharper 및 지금 기억할 수없는 몇 가지).

그래서 나는 붙어 있고, 내 자신 만의 적절한 것을 찾을 수없고, 웹에서도 아무것도 찾을 수 없다. 이전에이 문제로 어려움을 겪은 사람이 없으며 해결 방법을 찾았습니까?


Answer #1

지역화 된 모델을 사용하고 IMyModel에 대한 뷰를 강력하게 유형화 한 다음 적절히 데코레이션 된 모델을 전달한 다음 적절한 모델을 수정하여 현지화 작업을 상당히 쉽게 사용하고 변경할 수있게 해 봤니?

깨끗하고 유연하며 관리하기가 쉽습니다.

Recourse 파일 기반 로컬 리 제이션으로 시작한 다음 보류를 위해 더 자주 모델을 캐시 된 DB 기반 현지화 모델로 전환해야 할 필요가 있습니다.





localization