是否有国际(或广泛使用)标准代码来指定日历系统的名称?
我正在开发一个应用程序(除其他外)在多个日历系统中存储和显示历史日期,例如Gregorian,Jewish,Hijri等。存储日期时,我需要能够说出它所处的日历系统。
我可以发明我自己的系统,但是那里已经存在一些东西,类似于ISO 639的语言?经过长时间的搜索,我找不到任何东西,但也许我一直在使用错误的术语。
答案 0 :(得分:3)
有效问题;最好不要将任意代码用于此类事情。
您只需使用CLDR使用的values of name
attribute:
<key name="ca" description="Calendar algorithm key" alias="calendar">
<type name="buddhist" description="Thai Buddhist calendar"/>
<type name="chinese" description="Traditional Chinese calendar"/>
<type name="coptic" description="Coptic calendar"/>
...
<type name="islamicc" description="Civil (algorithmic) Arabic calendar" deprecated="true" preferred="islamic-civil" alias="islamic-civil"/>
</key>
但您也可以调整CLDR数据定义中使用的方法,该方法包括使用BCP47(“识别语言的标记”)扩展名{{3}用于“使用语言标记识别基于Unicode语言环境的变体。此扩展名的'singleton'标识符为'u'”。例如,泰语由th
标识。因此,th-u-ca-buddhist
将区域设置标识为泰语,并支持佛教日历:
th-u-ca-buddhist
| | |
| | +--> Calendar name (values in CLDR bcp47/calendar.xml).
| +-----> 2 char key defining extension to follow (here "ca" for calendar).
+--------> Identifies that extension U values are to follow.
几乎没有更多的扩展用法示例:
fa-u-ca-islamic-rgsa
:有伊斯兰历法的波斯语,沙特阿拉伯目击。fa-u-ca-persian
:波斯语的波斯语。fa_AF-u-ca-persian
:波斯语的波斯语(阿富汗语)。显然,如果您的目的只是存储日历和日历的标识符,您可以使用en
;即。
{ 'year': 1392, 'month': 6 , 'day': 31 , 'calendar': 'en-u-ca-persian' }