programing

CurrentCulture, InvariantCulture, CurrentUICulture 및 InstalledUICulture의 차이점

copyandpastes 2021. 1. 18. 22:12
반응형

CurrentCulture, InvariantCulture, CurrentUICulture 및 InstalledUICulture의 차이점


차이점은 무엇이며 CurrentCulture, InvariantCulture, CurrentUICultureInstalledUICulture에서가 System.Globalization.CultureInfo?


나는 이것 보다 조금 더 통찰력있는 대답을하려고 노력할 것이다 .

포맷에는 CurrentCulture를 사용해야합니다. 즉, 숫자, 통화, 백분율, 날짜 및 시간은 사용자에게 표시 하기 전에 항상 이 문화로 형식을 지정 해야합니다 . 여기에 몇 가지 예 :

const string CURRENCY_FORMAT = "c";
const string PERCENTAGE_FORMAT = "p";

DateTime now = DateTime.UtcNow; // all dates should be kept in UTC internally
// convert time to local and format appropriately for end user
dateLabel.Text = now.ToLocalTime().ToString(CultureInfo.CurrentCulture);

float someFloat = 12.3456f;
// yields 12,3456 for pl-PL Culture
floatLabel.Text = someFloat.ToString(CultureInfo.CurrentCulture);
// yields 12,35 zł for pl-PL Culture - rounding takes place!
currencyLabel.Text = someFloat.ToString(CURRENCY_FORMAT, CultureInfo.CurrentCulture);
// yields 1234,56% for pl-PL Culture - 1.0f is 100%
percentageLabel.Text = someFloat.ToString(PERCENTAGE_FORMAT, CultureInfo.CurrentCulture);

한 가지 중요한 점은 통화 관련 정보를 처음부터 사용 float하거나 double저장 하지 않아야한다는 것입니다 ( decimal올바른 선택입니다).
다른 일반적인 사용 사례 CurrentCulture는 로케일 인식 구문 분석입니다. 애플리케이션은 항상 사용자가 지역 형식으로 입력을 제공 할 수 있도록 허용 해야 합니다.

float parsedFloat;
if (float.TryParse(inputBox.Text, NumberStyles.Float, CultureInfo.CurrentCulture, out parsedFloat))
{
    MessageBox.Show(parsedFloat.ToString(CultureInfo.CurrentCulture), "Success at last!");
}

IFormatProvider묵시적이며로 간주되지만 항상 매개 변수를 제공 합니다 CultureInfo.CurrentCulture. 그 이유는 동료 개발자들과 소통하고 싶기 때문입니다. 이것은 최종 사용자에게 표시 될 것입니다. 이것이 FxCop이이 매개 변수를 오류로 처리하는 이유 중 하나입니다.


반면에 InvariantCulture 는 위에서 언급 한 클래스 중 하나를 텍스트 표현으로 안정적으로 변환하는 데 사용해야합니다. 당신은 예를 들어 전송을위한 원하는 그렇다면 DateTime, float, double또는 네트워크를 통해 유사한 물체, 데이터베이스 또는 (XML 포함) 텍스트 파일의 일종으로 저장, 당신은해야한다 항상 사용합니다 InvariantCulture:

float someFloat = 1234.56f;
// yields 1234.56
string internalFloat = someFloat.ToString(CultureInfo.InvariantCulture);
DateTime now = DateTime.UtcNow;
// yields something like 04/16/2011 19:02:46
string internalDateAndTime = now.ToString(CultureInfo.InvariantCulture);

여기서 주목할 점은에서 제공하는 날짜 / 시간 형식 InvariantCulture이 실제로 en-US와 정확히 동일 하다는 것 입니다. 신뢰할 수 있지만 정확하지는 않습니다. 실제로 사용해야하는 것은 ISO8601 교환 가능한 날짜 및 시간 형식 입니다. 어떤 이유로 Microsoft는 이러한 패턴을 제공하지도 않습니다 (가장 가까운 패턴은 정렬 가능한 패턴- "s"및 ISO8601 형식과 유사한 범용 패턴- "u"입니다). 다음과 같이 고유 한 패턴을 만들어야합니다.

const string iso8601Pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'";
string iso8601Formatted = now.ToString(iso8601Pattern);

매우 중요한 참고 사항 : 이 매개 변수를 생략하면 심각한 오류가 발생할 수 있으므로 IFormatProvider실제로 여기에 필요 합니다. 프랑스 OS의 결함을 수정해야했습니다. 코드는 다음과 같습니다.

float dbVersion = // some kind of logic that took float from database
string versionString = dbVersion.ToString(); // culture-aware formatting used
Version ver = new Version(versionString); // exception thrown here

그 이유는 매우 간단했습니다. 프랑스어 OS (프랑스 지역 형식)에서 형식화 된 float는 10,5와 같은 형식으로 지정되었고 Version클래스에는 Culture-invariant 입력이 필요했습니다.


CurrentUICulture 는 응용 프로그램에 적합한 번역 가능한 리소스를로드합니다. 즉, 올바른 문자 메시지, 색상 및 이미지를 표시하는 데 사용해야합니다.
Asp.Net 응용 프로그램에서 어떤 이유로 CSS Localization Mechanism (언어 별 CSS 정의를 재정의 할 수있는 기능)을 구현하려는 경우 CurrentUICulture좋은 방법입니다 (웹 브라우저에서이 속성을 실제로 읽은 경우).
마찬가지로 언어 전환 메커니즘을 구현 CurrentUICulture하려면 재정의해야합니다.


InstalledUICulture 는 기본 OS UI 로케일에 연결됩니다. MSDN 은 다음과 같이 말합니다.

이 속성은 Windows API의 GetSystemDefaultUILanguage와 동일합니다.

이 속성이 무엇인지 실제로 이해하려면 몇 가지 이론을 파헤쳐 야합니다. 다양한 Windows 제품 라인이 있습니다.

  • 단일 언어 (예 : 영어, 프랑스어, 독일어, 일본어 등)
  • MUI (즉, 다국어 사용자 인터페이스-영어 기반 OS 및 언어 팩)

단일 언어 제품 라인의 경우 InstalledUICulture는 항상 운영 체제 언어를 반환하는 반면 MUI의 경우 항상 영어 (미국) (일명 en-US)를 반환해야합니다. 유용합니까? 모르겠습니다. 그런 정보가 필요하지 않았습니다. 그리고 개인적으로이 속성을 이용하는 프로그램을 본 적이 없습니다.


이 답변 에서 가져온 :

CurrentCulture is the .NET representation of the default user locale of the system. This controls default number and date formatting and the like.

CurrentUICulture refers to the default user interface language, a setting introduced in Windows 2000. This is primarily regarding the UI localization/translation part of your app.

Whatever regional options the system is configured to have will be the "Current" values in your .NET app.

Often times they are both the same. But on my system they would be different: I prefer my numbers and dates in the German format, so the CurrentCulture would be German, but I also prefer all my applications in English, so the CurrentUICulture would be English.

ReferenceURL : https://stackoverflow.com/questions/5060446/difference-between-currentculture-invariantculture-currentuiculture-and-instal

반응형