我有这个C#代码,例如
DateTime.Now.ToString("MMMM dd, yyyy");
现在当前线程正在加载阿拉伯文化。所以结果是这样的
???? 19, 2010
但我不希望'2010'和'19'用英语(也称为拉丁语或West Arabic数字) - 我希望东阿拉伯语数字像“2”。
我试过
DateTime.Now.ToString("MMMM dd, yyyy", CultureInfo.GetCultureInfo("ar-lb"));
给出了相同的结果。 那么任何想法?
答案 0 :(得分:13)
你的解决方法(只列出你想在字符串数组中使用这些数字的所有文化):
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;
}
}
然后使用此方法,为您想要拥有'中央阿拉伯数字'的所有strings
,如下所示:
DateTime.Now.ToString().ConvertNumerals();
答案 1 :(得分:6)
作为一个快速测试,我写这篇文章列出了一年中没有“2010”的所有文章:
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);
}
结果是:
ar-SA : ربيع الأول 05, 1431
dv-MV : ربيع الأول 06, 1431
prs-AF : ربيع الأول 06, 1431
ps-AF : ربيع الأول 06, 1431
th-TH : กุมภาพันธ์ 19, 2553
要将数字转换为阿拉伯语文本,看起来this "NumToArabicString" project会执行此操作。它看起来并不像.net框架中有任何东西。
答案 2 :(得分:4)
唯一的解决方案是手动转换数字。
除了文明感知类(如{{1它似乎未实现或其他。
答案 3 :(得分:3)
试试这个:
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');
}
}
答案 4 :(得分:2)
您可以使用Windows.Globalization.NumberFormatting.NumeralSystemTranslator类在Latin和任何支持的数字系统之间进行转换。要翻译为阿拉伯语,请将NumeralSystem
属性设置为"Arab"
,然后您可以调用TranslateNumerals
方法。
或者,您可以直接使用Windows.Globalization.DateTimeFormatting.DateTimeFormatter课程。
答案 5 :(得分:0)
我们使用英文阿拉伯数字。因此,您所看到的是正确的 - 也是唯一可能的 - 行为。
答案 6 :(得分:0)
我已采用@Marcel B方法/解决方法,因为我面临的问题与原始问题相同。
就我而言,这是针对“ ar-KW”文化的。唯一的区别是我使用的是 NumberFormat.NativeDigits ,它已经是 CultureInfo 的一部分。
您可以这样检查(根据您当前的线程情况):
Thread.CurrentThread.CurrentCulture.NumberFormat.NativeDigits
因此,代码将如下所示:
private static class ArabicNumeralHelper
{
public static string ConvertNumerals(this string input)
{
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
if (new string[] { "ar-lb", "ar-SA" }
.Contains(cultureInfo.Name))
{
return input.Replace('0', cultureInfo.NumberFormat.NativeDigits[0])
.Replace('1', cultureInfo.NumberFormat.NativeDigits[1])
.Replace('2', cultureInfo.NumberFormat.NativeDigits[2])
.Replace('3', cultureInfo.NumberFormat.NativeDigits[3])
.Replace('4', cultureInfo.NumberFormat.NativeDigits[4])
.Replace('5', cultureInfo.NumberFormat.NativeDigits[5])
.Replace('6', cultureInfo.NumberFormat.NativeDigits[6])
.Replace('7', cultureInfo.NumberFormat.NativeDigits[7])
.Replace('8', cultureInfo.NumberFormat.NativeDigits[8])
.Replace('9', cultureInfo.NumberFormat.NativeDigits[9]);
}
else return input;
}
}
希望对您有帮助。