2009-05-28 4 views
4

string.Format() 또는 .Parse()와 같은 일부 메서드에는 IFormatProvider가 필요합니다. 당신은 어떻게 그것을 제공합니까? (당신은 현지화가 필요하지 않을 것이라는 점을 알고있다) 폐쇄 된 환경에서 응용 프로그램, 당신은 그냥 건너 뛰고 IFormatProvider를하지 않고 메소드를 호출 할에서어떻게 현지화 처리/CultureInfo

  • ?

  • 현지화 될 수있는 응용 프로그램에서는 모든 메서드 호출에 대해 올바른 값을 생각하고 바로 설정해야합니까? 아마도 'CultureInfo.CurrentCulture'또는 'CultureInfo.CurrentUiCulture'일 것입니다.

  • 또는 'MyUiCultureInfo'및 'MyCultureInfo'와 같은 전역 변수를 사용하여 값을 변경하여 현지화를 전환 할 수 있습니까? 어떻게 그리고 어디에서 이러한 변수를 저장합니까?

  • 라이브러리 또는 프레임 워크를 개발할 때 고려해야 할 사항이 있습니다.이 경우 현지화를 처리하는 방법은 무엇입니까?

답변

6

난 항상 우리 (ASP.NET) 응용 프로그램에서 올바른 값으로 CurrentThread.Current (UI) 문화를 설정하고있다. 이것은 일반적으로 사용자의 환경 설정 또는 구성 파일에 저장된 기본값 (사용자가 환경 설정을 정의하지 않은 경우)에 따라 각 요청의 시작 부분에서 수행됩니다.

현재 스레드의 속성을 설정 한 후에는이 메서드에 IFormatProvider가 제공되지 않아도 숫자, 날짜 등이 올바르게 형식이 지정되거나 파싱됩니다. 그렇지 않으면 정확한 IFormatProvider가 모든 곳에서 전달되도록해야합니다.

도서관의 경우 나는 이러한 것들을 위해 응용 프로그램에 의존해야하며 이러한 것들에 대해 걱정할 필요가 없다고 생각합니다.

+1

에게 ... 어떤 하드 코딩 또는 내 자신의 필요한 문화 날짜/시간 변환을 할 필요가 없습니다 당신의 FxCop 규칙을 해당 끄합니까? 그들은 당신의 해결책을 인식하지 못하는 것 같습니다. – tanascius

+0

FxCop을 사용하지 않습니다! – M4N

1

저는 현재 우리나라에서 소수의 지적인 사람들이 소수 구분 기호를 쉼표로 사용하기 때문에 현재 문화권을 영어로 설정했습니다. 경우에 따라 십진수는 ',', 때로는 '.'로 표시됩니다. 모든 컴퓨터가 올바르게 지역 설정을 구성한 것은 아니며 에 의존하면 안됩니다..

해당 응용 프로그램 전체의 설정을 설정하려면 다음

Application.CurrentCulture = new CultureInfo("en-US"); 
Application.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."; 
+1

당신의 나라는 우리 나라처럼 들립니다 :) – tanascius

+2

당신은 소수점 구분 기호에 대해 불평 할 것이고 날짜의 중간에 날짜를 쓰는 문화권을 사용할 것입니다. ;) 그러나 나는 너의 고통을 느낀다! – ANeves

1

당신이 폐쇄 된 환경에서 제공 한 IFormatProvider를하지 않고 메서드를 호출 할 수 있습니다 말하는 것처럼.

당신은 또한이 같은은 CultureInfo 개체를 제공 할 수 쓰고있는 :

 Console.WriteLine(String.Format(CultureInfo.CurrentCulture, "{0}", DateTime.Now)); 
     Console.WriteLine(String.Format(new CultureInfo("en-US"), "{0}", DateTime.Now)); 

을 내 CurrentCulture 이런 스웨덴어 때문에이 나를 ​​위해 두 가지 방법으로 날짜를 표시합니다 :

2009-05 -28 13시 12분 43초

2009년 5월 28일 오후 1시 12분 43초

CultureInfo.CurrentCulture는 등 날짜의 형식화하는을 처리하고 setti로부터 공급 현재 컴퓨터에 있습니다.

CurrentCulture.CurrentUiCulture는 번역 인 현지화와 관련이 있습니다. Windows에서 메뉴 등에 표시되는 것을 의미합니다.

아무 것도 제공되지 않으면 CurrentCulture를 사용하는 것이 가장 좋습니다.

0

항상 Culture 속성을 ASPX 또는 마스터 페이지의 시작 부분에 배치하고 모든 변환을 수행합니다. 나는

. 
<%@ Page Language="C#" ..etc... Culture="en-AU" %> 
. 

Simplez