2009-10-29 3 views
2

나는 작업중인 응용 프로그램의 영어 숫자를 아랍어 숫자로 표시해야합니다.C# WPF 영어 숫자를 아랍어 숫자로 변환

public class Class1 
{ 
    private double someDouble = 0.874; 

    public double SomeDouble 
    { 
     get { return someDouble; } 
    } 
} 

내가 런타임에 아랍어 숫자에 표시되는 비율에 SomeDouble의 값을 변환 할 : 여기

이중를 보유하고 예를 들어 클래스입니다.

<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:ArabicNumbers" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
x:Class="ArabicNumbers.Window1" 
Title="Window1" 
Height="300" 
Width="300"> 
<Window.Resources> 
    <local:Class1 x:Key="Class1Instance" /> 
    <local:DoubleValueConverter x:Key="doubleValueConverter" /> 
</Window.Resources> 

<Grid DataContext="{Binding Source={StaticResource Class1Instance}}"> 
    <TextBlock 
     HorizontalAlignment="Left" 
     VerticalAlignment="Top" 
     TextWrapping="Wrap" 
     Margin="10" 
     Text="{Binding SomeDouble, Converter={StaticResource doubleValueConverter}, Mode=Default}"/>  
</Grid> 

그리고 내 테스트 값 계산기, DoubleValueConverter : 윈도우의 뒤에있는 코드에서

public class DoubleValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     double valueAsDouble = (double)value; 
     return valueAsDouble.ToString("P1", culture); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

내가 설정, 여기에 내가 테스트로 사용하고 빠른 XAML입니다 현재 문화권에 대한 언어 속성은 "ar-SA"입니다. 이것은 DoubleValueConverter에서 culture 매개 변수의 값을 변경하므로 요구 사항 인 것 같습니다.

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.Name); 
     InitializeComponent(); 
    } 
} 

이 컨버터는 소수 구분 즉, 그러나 나는 아랍어 문자가 아닌 "87,4 %"로 출력하려면이 번호가 필요합니다, 올바른 형식의 속성을 제공합니다.

누구나 간단한 방법으로 제안을 할 수 있습니까?

+0

당신이 "여든일곱 - 점 - 같은 일을 할 출력을 필요로한다는 것을 의미합니까 4 퍼센트 "는 아랍어 ("سبعة وثمانون نقطة أربعة في المئة ")로만 제공됩니까? – MusiGenesis

+2

아뇨, 미안 해요. 1 2 3 – Jason

+0

그런데, 나는 그 사람들이 바른 인물이 되길 바랄뿐입니다. 나는 말하거나, 읽거나, 아랍어로 쓰지 않습니다. – Jason

답변

3

. 나는 숫자에 대한 아랍어 문자의 사용이 맥락 적이라는 것을 발견했다. 즉 자릿수 모양은 동일한 출력의 이전 텍스트에 따라 다릅니다.

예 : TextBlock 요소의 텍스트로 "1234"를 입력하면 영어 모양으로 표시됩니다. 그러나 1234가 1234 년과 같은 일부 아랍어 텍스트 ("abcde"라고 가정 해 봅시다)가 선행 된 경우. 이 예에서 첫 번째 네 자리는 문자 "1234"에 대한 아랍어 모양입니다.

http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.digitsubstitution.aspx http://msdn.microsoft.com/en-us/library/system.globalization.digitshapes.aspx

:

자세한 내용은 다음 링크를 참조하십시오 : - (디스플레이를 제대로 텍스트 상자에 그러나 미리보기가 숫자에 대한 영어 모양을 보여준다는이 웹 사이트에서 작동하지 않습니다) 두 번째 링크보고에서

가, 내가 원하는 확실한 선택이 우리의 CurrentCulture는 운영 시스템에 의해 자동으로 설정됩니다 그러나 때문에, NativeNational되었으며, CurrentCulture 인스턴스는 읽기 전용입니다. 이 우회

, 나는 단순히 새로운 CultureInfo를 객체를 생성 DigitShapes.NativeNational에 DigitSubstitution을 변경하려면 :

 CultureInfo ci = CultureInfo.CreateSpecificCulture(Thread.CurrentThread.CurrentCulture.Name); 
     ci.NumberFormat.DigitSubstitution = DigitShapes.NativeNational; 
     Thread.CurrentThread.CurrentCulture = ci; 
+0

주목할만한 점은 컨트롤에서 DigitSubstitution을 변경할 수 있다는 것입니다. – Jason

+0

감사합니다. 나는 그것을 다른 방향으로 필요로했다. 나는. 서양 숫자를 아랍어 텍스트로 유지하므로 ci.NumberFormat.DigitSubstitution = DigitShapes.None로 설정합니다. –

+0

당신은 내 하루를 구했어, 시간과 노력에 감사드립니다 :) –

0

이것은 당신이 필요로하는 것처럼 보인다 : 나는 이것에 아주 빠르고 쉬운 해결책을 발견했습니다

http://weblogs.asp.net/abdullaabdelhaq/archive/2009/06/27/displaying-arabic-number.aspx

+0

나는 그걸 보았지만 더 간단한 방법이 있어야합니다. 프로젝트의 다른 곳에서 우리는 동급의 아랍 문자로 숫자가 표시됩니다. double은 실제로 클래스의 문자열로 저장 된 다음 XAML에 바인딩됩니다. MyString = myDouble.ToString ("F0", CultureInfo.CurrentCulture); 는 다음 바인딩 : <라벨 내용 = "{바인딩 경로 = MyString에, ElementName을 = myElementName, 모드 = 기본}"/> 나뿐만 아니라 이것을 시도하고 그것은 난 부분을 위해 작동하지 않았다 작동하지만 작동하지 않는 것 같습니다. 나는 더 명백한 것을 놓치고 있어야합니다. – Jason

+0

글쎄, 나는 www.lmgtfy.com을 사용하여 링크하지 않았기 때문에 기쁩니다. 외국어 사이트가 모두 정규 숫자를 사용한다고 생각했기 때문에이 문제는 새로운 것이 었습니다. 유일한 문화적 차이는'.'와','교환이었습니다. – MusiGenesis

+0

그래, 나도 그래. 불행히도 스크린 샷과 실제 코드를 보여줄 수는 없으므로 추가 지원이 어려워집니다. 소수 구분 기호는 Culture를 ToString 메서드로 전달하기 만하면 고정되어 있지만 많은 검색을해야 할 것처럼 보입니다. – Jason

관련 문제