如何显示公历中的阿拉伯日期?

问题描述 投票:0回答:3

我有一个多语言 ASP.NET 网站;其中一种语言是阿拉伯语 (ar-SA)。要在文化之间切换,我使用以下代码:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Name)
Thread.CurrentThread.CurrentUICulture = New CultureInfo(Name)

例如,当显示文章的日期时,我只是这样做,本地化 API 会处理所有事情:

<%#Eval("DatelineDate","{0:d MMMM yyyy}")%>

问题在于,它使用 Hijiri(伊斯兰)日历显示日期(例如,2008 年呈现为 1429)。客户希望使用公历显示日期(当然,仍然以阿拉伯语呈现月份名称和其他所有内容)。我该怎么做?

asp.net vb.net localization arabic
3个回答
11
投票

答案:

事实证明 ar-SA 文化是唯一使用圣历的文化;所有其他阿拉伯文化都使用公历。以下是阿拉伯语的不同日期格式(有点混乱,因为 WMD 不支持似乎支持 RTL 文本)。

ar-AE 11 ديسمبر 2008 
ar-BH 11 ديسمبر 2008 
ar-DZ 11 ديسمبر 2008 
ar-EG 11 ديسمبر 2008 
ar-IQ 11 كانون الأول 2008 
ar-JO 11 كانون الأول 2008 
ar-KW 11 ديسمبر 2008 
ar-LB 11 كانون الأول 2008 
ar-LY 11 ديسمبر 2008 
ar-MA 11 دجنبر 2008 
ar-OM 11 ديسمبر 2008 
ar-QA 11 ديسمبر 2008 
ar-SA 13 ذو الحجة 1429 
ar-SY 11 كانون الأول 2008 
ar-TN 11 ديسمبر 2008 
ar-YE 11 ديسمبر 2008 

对于它的价值来说,这是我用来生成此列表的快速而肮脏的代码:

    Response.Write("<table width=300px>")
    For Each ci As CultureInfo In (From c As CultureInfo In CultureInfo.GetCultures(CultureTypes.AllCultures) Order By c.Name Where c.Name.StartsWith("ar-"))
        Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(ci.Name)
        Thread.CurrentThread.CurrentUICulture = New CultureInfo(ci.Name)
        Response.Write(String.Format("<tr><td>{0}</td> <td style='direction:rtl;font-size:20px;'>{1:d MMMM yyyy}</td></tr>", ci.Name, Today))

    Next
    Response.Write("</table>")
    Response.End()

更多文化请访问 http://www.massimilianobianchi.info/max/articles/22/UI-culture-list-and-codes.aspx


2
投票

您可以使用其他阿拉伯语语言环境,它们之间的唯一区别是日期格式...


0
投票

使用 Unicode LDML 怎么样?

IMO,最好在保留国家/地区设置的同时更改日历(在您的情况下是

SA
)。

例如:

const date = new Date(); 
date.toLocaleDateString("ar-SA-u-ca-gregory"); // "٧‏/٢‏/٢٠٢٤"
date.toLocaleDateString("ar-SA-u-ca-iso8601"); // "٧‏/٢‏/٢٠٢٤"
date.toLocaleDateString("ar-SA-u-ca-islamic"); // "٢٧‏/٧‏/١٤٤٥ هـ"
date.toLocaleDateString("ar-SA-u-ca-islamic-umalqura"); // "٢٧‏/٧‏/١٤٤٥ هـ"

您也可以自定义它:

(new Date()).toLocaleDateString("ar-SA-u-ca-iso8601", {
  weekday: "long",
  year: "numeric",
  month: "long",
  day: "numeric",
  timezone: "Asia/Riyadh",
}) // "الأربعاء، ٧ فبراير ٢٠٢٤" 
© www.soinside.com 2019 - 2024. All rights reserved.