2009-03-31 5 views
4

최종 사용자에게 사용자 지정 예외를 던지거나 메시지를 발급 할 때 하드 코딩 된 문자열 (문자열 상수 포함)을 사용하거나 리소스 전용 어셈블리를 사용하거나 데이터베이스의 테이블에서 문자열을 가져올 수 있습니다.모범 사례 : 국제화를 위해 C# .net에서 예외/오류 또는 정보 메시지를 저장하는 가장 좋은 방법은 무엇입니까?

내 응용 프로그램을 다시 컴파일하지 않고도 쉽게 다른 언어로 전환 할 수 있기를 바랍니다. 문자열 리소스를 어셈블리 또는 데이터베이스에 저장하면 이러한 목적을 달성 할 수 있지만 프로그램 논리의 복잡성이 증가하여 제품 비용이 추가됩니다.

내 질문은 : 각 옵션과 함께 제공되는 비용을 무시하지 않고 목적을 염두에두고가는 가장 좋은 방법은 무엇입니까? 나열된 것보다 더 나은 연습을한다면, 나는 그것을 듣고 싶습니다.

기술 : OS : 윈도우 제품군 플랫폼 : .NET 프레임이 최대 언어 : C# 데이터베이스 : 2005 MS SQL 최대

고마워!

컬린

답변

4

사용 자원 :

어떻게이 프로그램 로직에 더 많은 복잡성을 추가합니까?

try 
{ 
    //do something with System.Net.Mail with invalid email.. 
} 
catch (FormatException fex) 
{ 
    throw new Exception(Resources.ErrorMsg.Invalid_Email, fex); 
} 

편집은

는 리소스를 만들 때 VS2008에서, 당신이 경우 내부 또는 공용 정의 할 수 있습니다. InvalidError 오류의 이름입니다

ClassLibrary1.Properties.Resources.InvalidError

: 그래서 우리는, 공개로 설정으로 ClassLibrary1라는 어셈블리에서, 우리는 같은 속성에 액세스 할 수 있습니다 가정합니다. 다시 말하지만 이것은 논리에 어떤 강박성도 추가하지 않는다고 생각합니다.

+0

내 솔루션 그러므로 여러 프로젝트, 여러 어셈블리가 포함되어 있습니다. 아이디어 중 하나는 리소스 전용 어셈블리를 만들어 문자열을 저장 한 다음 ResourceManager를 사용하여 어셈블리에 연결하고 문자열을 읽는 것입니다. 복잡성이 증가합니다. –

+0

@Cullen Tsering : 저는 Josh와 동의해야합니다. 디자이너가이 모든 작업을 처리하고, 자원 파일의 문자열을 노출하는 멋지게 형식화 된 클래스를 작성합니다. 그러면 사용자가해야 할 일은 견본. 귀하의 의견은 설계 시간 지원을 시도하지 않았 음을 나타냅니다. – casperOne

+0

casperOne : 디자인 타임 지원에 대해 자세히 설명해 주시겠습니까? –

2

.NET은 이미 명명 규칙을 사용하여 여러 문화에 대해 여러 자원을 지원합니다 조쉬 VS2008을 지적 본질적으로

<default resource file name>.<culture>.resx 

이러한 리소스에 액세스 할 수있는 좋은 형식 안전 래퍼를 생성합니다.

그러나 VS UI는 수행 할 수있는 작업의 최소 한도를 노출합니다.

기본값과 완전히 동일한 새 리소스 파일을 만드는 경우 resx 앞에 culture 정보를 추가하십시오. (참고 : 다른 곳에서 만들어서 마법 속성 폴더에 복사해야합니다.)

리소스를 액세스하는 스레드에 문화권을 적용한 경우 응용 프로그램은 특정 리소스에서 올바른 문자열을 가져옵니다. 예를 들어

:

// Using the default culture 
    string s = Resources.Error1Msg; 

    Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-CO"); 

    // Using the specific culture specified as above: 
    s = Resources.Error1Msg; 

당신이, 당신에게 메시지를 매개 변수화 출력을 매개 변수화 및 String.format를 사용해야하는 경우.

텍스트를 사용하는 대신 예외가 풍부한 페이로드 (오류를 설명하기 위해)를 전달하는 방식으로 응용 프로그램 계층을 설계하는 것이주의해야합니다.

이렇게하면 프리젠 테이션 레이어가 페이로드를 활용할 수있는 최상의 UI 환경을 제공 할 수 있습니다.

HTH

필립

+0

도움이되는 의견은 필립에게 감사드립니다. –

관련 문제