변하지 않는 문화 란 무엇입니까?


173

누구든지 변하지 않는 문화 의 사용법을 보여주는 예를 들어 줄 수 있습니까? 설명서에서 설명하는 내용을 이해하지 못합니다.


14
영어이지만 어떤 위치와도 관련이 없습니다.

답변:


132

변하지 않는 문화는 변하지 않기 때문에 유용한 특별한 문화입니다. 현재 문화권은 한 사용자에서 다른 사용자로, 또는 한 실행에서 다른 실행으로 변경 될 수 있으므로 동일하게 유지 될 수는 없습니다.

매번 동일한 문화권을 사용할 수있는 것은 직렬화와 같은 여러 흐름에서 매우 중요합니다. 한 문화권에서는 1,1 값을, 다른 문화권에서는 1.1을 가질 수 있습니다. 두 번째 문화권에서 "1,1"값을 구문 분석하려고하면 구문 분석이 실패합니다. 그러나 고정 문화권을 사용하여 숫자를 문자열로 변환 한 다음 문화권이 설정된 모든 컴퓨터에서 다시 구문 분석 할 수 있습니다.

// Use some non-invariant culture.
CultureInfo nonInvariantCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = nonInvariantCulture;

decimal dec = 1.1m;
string convertedToString = dec.ToString();

// Simulate another culture being used,
// following code can run on another computer.
nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ",";

decimal parsedDec;

try
{
    // This fails because value cannot be parsed.
    parsedDec = decimal.Parse(convertedToString);
}
catch (FormatException)
{
}

// However you always can use Invariant culture:
convertedToString = dec.ToString(CultureInfo.InvariantCulture);

// This will always work because you serialized with the same culture.
parsedDec = decimal.Parse(convertedToString, CultureInfo.InvariantCulture);

9
가치가있는 것은 System.Globalization네임 스페이스에 있습니다.
Jim H.

1
이것은 동일한 문화로 직렬화 되었기 때문에 항상 작동합니다. << 이것은 나에게 이해가되지 않았습니다. CultureInfo.InvariantCulture동일한 문화권으로 직렬화 하여 사용하는 경우 작동하는 경우 .... 사용하는 것과 동일하지 CultureInfo.CurrentCulture않습니까?
Alisson

3
@Alisson Andrew의 마지막 두 코드 문장을 원래 흐름으로 되 돌리면 더 이해가 될 것입니다. 를 사용하여 항상 직렬화하면를 사용하여 CultureInfo.InvariantCulture항상 10 진수로 다시 구문 분석 할 수 있음을 알고 있습니다 CultureInfo.InvariantCulture. CultureInfo.CurrentCulture직렬화에 사용 하는 경우 사용자는 현재 문화권으로 "en-US"를 가질 수 있습니다. 10 진수로 다시 구문 분석하는 다음 사용자에게는 구분 기호로 ","를 사용하는 현재 문화권이있을 수 있습니다.
David Specht

1
@Andrew 어쩌면 나는 조밀하지만 David의 의견없이 당신이 말한 것을 이해할 수 없었습니다. 명시 적으로 답변을 편집했습니다.
jpaugh

111

정의 된 행동으로 영어를 기반으로 한 가짜 문화. 예를 들어 구성 파일에 내용을 작성하여 사용자가 정의한 문화권에 관계없이 읽고 쓸 수 있습니다.

기본적으로 그것은 인공적인 문화이며 변하지 않을 것 입니다.


4
특히, 숫자의 문자열 형식으로 쉼표와 점을 다르게 사용하거나 대소 문자를 변환하면 문제가 발생하지 않습니다.
Steve Gilham

8
그렇다 ... 전형적인 문제 : * 단어가 영어라고 생각하는 미국 프로그래머;) 그리고 독일 고객은 1000에 대해 1.000,00을 쓴다. * 같은 언어로도 스위스와 독일은 "."를 사용합니다. 숫자로 다른 방식으로 ",". 결과-> 구성 파일이 가비지입니다. 불변의 언어를 사용하십시오;)
TomTom

23
Steve의 의견에 추가하려면 실제로 사물 어떻게 보이는지 신경 쓰지 않을 때 사용하는 문화입니다 (쉼표 또는 점을 사용하는지 여부는 신경 쓰지 않습니다). 동일해야합니다 (예 : 작성한 내용을 읽을 수 있어야하기 때문에).
itowlson

7

문화에 관계없이 동일한 물건에 사용됩니다 (적절한 문화 X로 변환 할 필요가 없음)

예를 들어 https://msdn.microsoft.com/en-us/library/4c5zdc6a(v=vs.100).aspx 입니다. 사용자가 엉망이되어서는 안되는 앱 특정 파일을 작성할 때 culture 매개 변수를 사용하는 모든 메서드에 InvariantCulture를 사용해야합니다.

위에 링크 된 문서에 따라 :

그러나 응용 프로그램은 파일에 지속되는 데이터의 형식화 및 구문 분석과 같이 문화 독립적 인 결과가 필요한 프로세스에만 불변 문화를 사용해야합니다.


3
이것은 불변의 문화가 단지 중간 형식으로 의도 된 것, 즉 불변의 문화의 결과 인 (즉, '불변의 문화에서') 사용자에게 물건을 표시하는 경우, 변하지 않는 문화를 이해하지 못하는 것.
mlhDev

3

불변 배양은 문화에 무감각하다; 영어와 관련이 있지만 국가 / 지역과는 관련이 없습니다.

CultureInfo.InvariantCulture는 고정 문화권의 인스턴스를 검색합니다. 문화가 필요한 System.Globalization 네임 스페이스의 거의 모든 메서드에 사용할 수 있습니다.

CompareInfo, DateTimeFormat 및 NumberFormat과 같은 속성에서 반환 된 개체는 변형 문화권의 문자열 비교 및 ​​서식 규칙도 반영합니다. 표시 할 때 InvariantCulture 속성 편리 오는 데이터를 유지 A의 문화 독립적 인 형식입니다.

예를 들어, 응용 프로그램의 현재 문화권과 관계없이 특정 형식으로 숫자 또는 날짜 시간을 표시하려면 CultureInfo.InvariantCulture 를 사용할 수 있습니다 .


0

이 언어는 보편적 인 단순한 비 지역별 영어 및 기타 관련 정보입니다. 프로그래밍 언어 자체의 언어와 같습니다. 범용 달력을 설정하는 데 의존 할 수 있습니다. 컨트롤러 이름, URL, 델리게이트 이름 등을 생성해야하는 상황 모든 사용자에게 자연스럽고 보편적으로 행동해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.