2010-03-18 2 views
3

통화 통화 코드는 "EUR"입니다. 이 숙박 시설은NativeEnglishName을 로그인 한 사용자의 현재 문화권에 의존하지 않고 iso 통화 기호로 가져 오기

RegionInfo class => ri.ISOCurrencySymbol에서도 찾을 수 있습니다. 그러나 RegionInfo 클래스는 현재 로그인 한 사용자에 따라 다릅니다. 내가 원하는 무엇

는 사용자가 EN-US, CN-CN 등 ..., 엉 드에서 경우에도 "유로"

가 어떻게 그렇게 할 수처럼 NativeEnglishName를 얻는 것입니다?

답변

2

어색한 문제는 사용 가능한 RegionInfo를 반복하는 쉬운 방법이 없습니다. 이용 가능한 모든 특정 문화를 반복하고 비교할 RegionInfo를 만들어야합니다. 이 코드는 작업이 완료되도록합니다.

public static string GetEnglishCurrencyName(string iso) { 
    foreach (var c in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) { 
    var reg = new RegionInfo(c.LCID); 
    if (string.Compare(iso, reg.ISOCurrencySymbol, true) == 0) 
     return reg.CurrencyEnglishName; 
    } 
    throw new ArgumentException(); 
} 

이렇게하면 많은 쓰레기가 생성됩니다. 이 작업을 자주 수행하는 경우 먼저 < 사전에 지역 정보를 캐시해야합니다.

+0

이 nobugZ 당신으로 내 용액 같다 : 개인 문자열 GetNativeCurrencyName (문자열 currencyISOCode) { CultureInfo를 []의 배양에 CultureInfo.GetCultures = (CultureTypes.SpecificCultures); foreach (문화권의 CultureInfo ci) { RegionInfo ri = new RegionInfo (ci.LCID); if (ri.ISOCurrencySymbol.Equals (currencyISOCode, StringComparison.CurrentCultureIgnoreCase)) return ri.CurrencyEnglishName; } return string.Empty; } – msfanboy

+0

에서 해결책을 찾았습니다. http://bytes.com/topic/net/answers/519499-currency-localization-issue – msfanboy

2

당신은 할 수 있습니다 :

string currencyName = CultureInfo.GetCultures(CultureTypes.SpecificCultures) 
        .Where(c => new RegionInfo(c.LCID).ISOCurrencySymbol == "EUR") 
        .Select(c => new RegionInfo(c.LCID).CurrencyEnglishName) 
        .FirstOrDefault(); 

가있는 "유로"를 반환합니다.

참고 그러나이 도착하는 처음으로 제공되는 통화 기호와 일치RegionInfo -이 특정한 경우에 정말 문제가 있지만, 통화를 사용하는 최초의 국가가를 얻을 수 있기 때문에 당신이 기본 통화 이름을 사용하는 경우가 될 수 동일한 통화를 사용하는 다른 국가와 통화의 지역 이름이 다를 수 있습니다 (가능성은 거의 없음).

0

"CurrencyEnglishName"도 ISO 표준 이름이 아닙니다. 예 : RegionInfo 여기서 ISOCurrencySymbol = "GBP"는 "영국 파운드 스털링"을 반환합니다.

그러나 실제 ISO 표준 이름은 단순히 "파운드 스털링"입니다.

내가가는 가장 좋은 방법은 DB 테이블 (또는 원하는 경우 구성 파일/섹션)에 ISO 값을 추가하고 거기에서 읽는 것입니다.

관련 문제