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


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.