Lol*_*Run 11 c# cultureinfo arabic
我有这个C#代码
DateTime.Now.ToString("MMMM dd, yyyy");
Run Code Online (Sandbox Code Playgroud)
现在当前的线程正在加载阿拉伯文化.所以结果是这样的
???? 19, 2010
Run Code Online (Sandbox Code Playgroud)
但我不希望'2010'和'19'用英语(也称拉丁语或西阿拉伯语数字) - 我想要东阿拉伯数字,如"2".
我试过了
DateTime.Now.ToString("MMMM dd, yyyy", CultureInfo.GetCultureInfo("ar-lb"));
Run Code Online (Sandbox Code Playgroud)
给出了相同的结果.那么任何想法?
Mar*_*l B 15
这个解决方法(只列出你想在字符串数组中使用这些数字的所有文化):
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用该方法,为strings您想要的所有"中央阿拉伯数字",如下所示:
DateTime.Now.ToString().ConvertNumerals();
Run Code Online (Sandbox Code Playgroud)
作为一个快速测试,我写这篇文章列出了当年没有"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);
}
Run Code Online (Sandbox Code Playgroud)
结果是:
ar-SA : ???? ????? 05, 1431
dv-MV : ???? ????? 06, 1431
prs-AF : ???? ????? 06, 1431
ps-AF : ???? ????? 06, 1431
th-TH : ?????????? 19, 2553
Run Code Online (Sandbox Code Playgroud)
要将数字转换为阿拉伯语文本,看起来这个"NumToArabicString"项目将会这样做.它看起来并不像.net框架中有任何内置.
小智 6
唯一的解决方案是手动转换数字。
您可以使用CurrentCulture.NumberFormat.NativeDigits数组而不是显式提供 Unicode 字符来支持除阿拉伯-印度数字之外的任何其他语言,但就文化感知类的内置支持而言,例如DateTime它似乎未实现或其他东西。
| 归档时间: |
|
| 查看次数: |
11032 次 |
| 最近记录: |