2011-05-10 2 views
10

2 개의 드롭 다운 목록을 만들려고합니다.모든 문화권의 드롭 다운 목록 작성 방법 (반복 없음)

맨 위는 모든 문화권을 제공합니다 (그러나 반복은 없음). 예 : 영어, 스페인어, 필리핀

맨 위 목록에서 선택하면 맨 아래 목록에 특정 유형이 표시됩니다.

나는 지금 내 상위 목록에이 코드를 사용합니다. 그것은 한 번에 너무 많은 보여주고 있기 때문에 차라리 GetCultures (CultureTypes.AllCultures)를 사용하지 않는 게 좋을 필리핀 (필리핀))를 표시하지 않습니다 그러나

foreach (CultureInfo cultureInfo in CultureInfo.GetCultures(CultureTypes.NeutralCultures)) 

.

NeutralCultures를 IList에로드해야하는 것처럼 보입니다. 그런 다음 AllCultures를 반복하여 ThreeLetterISOLanguageName이 목록에 있는지 확인합니다 (추가하지 않는 경우).

모범 사례가 있습니까? 다른 CultureTypes 값의 기준에서

감사

답변

17

봐. 그것은 각각에 대해 무엇이 포함되어 있는지 알려줍니다.

나는 특정 문화를 제외하고 모든 것을 원한다고 생각하니? 모든 비 특정 문화를 하나의 세트로 결합하거나 모든 문화권을 얻고 특정 문화를 제외 할 수 있습니다. 두 번째 방법은 LINQ에서 표현하는 가장 쉬운 것 :

var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures) 
          .Except(CultureInfo.GetCultures(CultureTypes.SpecificCultures)); 

을가 CultureTypes이 플래그 속성을 가지고 있기 때문에 그들을 가져올 때, 우리는 또한 단지 SpecificCultures을 마스크 수 보이지만.

var cultures = CultureInfo.GetCultures(
    CultureTypes.AllCultures & ~CultureTypes.SpecificCultures 
); 
+0

감사합니다. Jeff, 매우 잘 작동합니다. 나는 영어와 프랑스어를 어떻게 쓰는지 좋아합니다. 내가 이해할 수없는 것은 그것이 왜 체코 어 "cs-CZ"를 갖지만 필리핀 "fil-PH"는 갖지 않는지입니다. 둘 다 구체적입니다 (각 국가마다 1 개). – aron

+0

@aron : 나는 당신이하는 말을 이해하고 있는지 잘 모르겠습니다. 이름의 첫 번째 부분은 [ISO 639-1 코드] (http://en.wikipedia.org/wiki/ISO_639-1) 코드이고 두 번째 부분은 [ISO 3166 코드] (http : // en.wikipedia.org/wiki/Iso_3166). ISO 639-1 코드만으로는 언어 (특정 지역과 관련이없는 중립 문화)를 나타냅니다. 체코 공화국 ('cs-CZ')은 체코 어 ('cs')를 사용하지만, 동등하지 않습니다. 둘 다 특정 문화이며 여기에 나열되어서는 안됩니다. 그것이 있다면, 아마도 당신이 만든 문화 객체 일 것입니다 (포함되어 있습니다). –

+0

'GetCultures'를 두 번 호출하고'Except'를 사용하는 대신'GetCultures (CultureTypes.AllCultures & ~ CultureTypes.SpecificCultures)'를 사용할 수 있습니다. –