2010-02-19 51 views
10

Tôi có điều này C# mã ví dụLàm cách nào để chuyển đổi chữ số tiếng Anh sang chữ số Ả Rập?

DateTime.Now.ToString("MMMM dd, yyyy"); 

Bây giờ xử lí hiện tại đang tải văn hóa Ả Rập. Vì vậy, kết quả là như thế này

???? 19, 2010 

Nhưng tôi không muốn '2010' và '19' là bằng tiếng Anh (còn gọi là Latin hoặc West Arabic chữ số) - Tôi muốn số Đông Ả Rập như "2 ".

tôi đã cố gắng

DateTime.Now.ToString("MMMM dd, yyyy", CultureInfo.GetCultureInfo("ar-lb")); 

cho kết quả tương tự. Vì vậy, bất kỳ ý tưởng?

+4

Bạn mong đợi điều gì sẽ xảy ra? http://en.wikipedia.org/wiki/Arabic_digits –

+3

chữ số arabic là ٠١٢٣٤٥٦٧٨٩ – LolaRun

Trả lời

13

Thy workaround này (chỉ cần liệt kê tất cả các nền văn hóa bạn muốn sử dụng chữ số này trong mảng string):

private static class ArabicNumeralHelper 
{ 
    public static string ConvertNumerals(this string input) 
    { 
     if (new string[] { "ar-lb", "ar-SA" } 
       .Contains(Thread.CurrentThread.CurrentCulture.Name)) 
     { 
      return input.Replace('0', '\u06f0') 
        .Replace('1', '\u06f1') 
        .Replace('2', '\u06f2') 
        .Replace('3', '\u06f3') 
        .Replace('4', '\u06f4') 
        .Replace('5', '\u06f5') 
        .Replace('6', '\u06f6') 
        .Replace('7', '\u06f7') 
        .Replace('8', '\u06f8') 
        .Replace('9', '\u06f9'); 
     } 
     else return input; 
    } 
} 

Sau đó sử dụng phương pháp này, cho tất cả các bạn strings bạn muốn có 'chữ số Ả Rập trung tâm' trong, như sau:

DateTime.Now.ToString().ConvertNumerals(); 
+0

Bài viết Wikipedia bạn liên kết để nói rằng các chữ số Ả Rập tiêu chuẩn được sử dụng trong thế giới Ả Rập và các chữ số Đông Ả Rập mà bạn đề cập chỉ được sử dụng ở một số quốc gia cụ thể. – ceejayoz

+0

đây là giải pháp rất tốt và dường như không có cách nào khác – LolaRun

0

Chúng tôi sử dụng chữ số Ả Rập bằng tiếng Anh. Như vậy, những gì bạn thấy là chính xác - và chỉ có thể - hành vi.

+3

Chữ số tiếng Anh được gọi là tiếng Ả Rập, nhưng chữ Ả Rập đại diện cho chúng khác nhau như vậy 0-9: ٠١٢٣٤٥٦٧٨٩ – LolaRun

+0

Điều này thực sự cần được bình luận ... –

6

Là một thử nghiệm nhanh chóng, tôi đã viết này để liệt kê tất cả các cutures mà không có "2010" trong năm:

 foreach (var ci in 
      from c in CultureInfo.GetCultures(CultureTypes.AllCultures) 
      where !c.IsNeutralCulture 
      let date = DateTime.Now.ToString("MMMM dd, yyyy", c) 
      where !date.Contains("2010") 
      orderby c.Name 
      select new {c.Name, date}) 
     { 
      Console.WriteLine("{0} : {1}", ci.Name, ci.date); 
     } 

kết quả là:

ar-SA : ربيع الأول 05, 1431 
dv-MV : ربيع الأول 06, 1431 
prs-AF : ربيع الأول 06, 1431 
ps-AF : ربيع الأول 06, 1431 
th-TH : กุมภาพันธ์ 19, 2553 

Để chuyển đổi các số sang văn bản tiếng Ả Rập, có vẻ như this "NumToArabicString" project sẽ làm điều đó. Nó không giống như có bất cứ điều gì được xây dựng trong khuôn khổ .net mặc dù.

4

Giải pháp duy nhất là chuyển đổi thủ công các chữ số.

Bạn có thể sử dụng mảng CurrentCulture.NumberFormat.NativeDigits thay vì cung cấp rõ ràng các ký tự Unicode để hỗ trợ bất kỳ ngôn ngữ nào khác ngoài các chữ số Ả Rập Ấn Độ, nhưng theo như hỗ trợ dựng sẵn của các lớp nhận biết văn hóa như DateTime thì dường như chưa được thực hiện hoặc .

2

Hãy thử điều này:

public static string ToIndicDigits(this string input) 
{ 
     return input.Replace('0', '\u0660') 
       .Replace('1', '\u0661') 
       .Replace('2', '\u0662') 
       .Replace('3', '\u0663') 
       .Replace('4', '\u0664') 
       .Replace('5', '\u0665') 
       .Replace('6', '\u0666') 
       .Replace('7', '\u0667') 
       .Replace('8', '\u0668') 
       .Replace('9', '\u0669'); 
    } 
} 
Các vấn đề liên quan