我正在尝试为format_date
使用自定义格式。我希望月份名称为大写,为此我使用的是MMMM yyyy
或LLLL yyyy
。我期待April 2007
的某些方面。这是我的测试程序:
from datetime import date
from babel.dates import format_date
d = date(2007, 4, 1)
print format_date(d, 'MMMM yyyy', locale='es')
print format_date(d, 'LLLL yyyy', locale='es')
print format_date(d, 'MMMM yyyy', locale='it')
print format_date(d, 'LLLL yyyy', locale='it')
print format_date(d, 'MMMM yyyy', locale='en')
print format_date(d, 'LLLL yyyy', locale='en')
这是输出:
abril 2007
abril 2007
aprile 2007
Aprile 2007
April 2007
April 2007
正如您所看到的,西班牙语(es
)版本错误:月份名称为小写,适用于MMMM
和LLLL
。这是为什么?这是巴贝尔的错误吗?从意大利语输出中,我预计MMMM
表示小写,LLLL
表示大写。大写月份名称的格式代码是什么? (documentation)
答案 0 :(得分:2)
Spanish month names are lowercase:
日历:一周中的日期和一年中的几个月的名称使用小写字母。 Hoy es martes。 (今天是星期二。)墨西哥庆祝独立委员会16 de septiembre。 (墨西哥于9月16日庆祝其独立。)
你想深入挖掘为什么Babel有两个格式字母。你走了。
你是对的,这在文档中没有明确说明,但通过阅读source code,我能够发现使用L
代替M
更改了get_month_names
call 1}} CLDR data files的参数。源代码显示:
context
会产生'格式''M'
会导致“独立”这是什么意思?好吧,进一步挖掘我发现Babel使用all explained there。这是Unicode Consortium指定的格式,结果是{{3}},包括'L'
和'M'
是标准。
根据上下文,某些语言使用两种不同形式的字符串(独立和格式)。通常,独立版本是该词的主格形式,格式版本属于该格式。使用了两个不同的字符:
'L'
“格式”显然是您通常想要的,因为它意味着月份与日期一起出现。
最后,它确实包含关于大写的说明:
如果由于上述任何语法原因而不需要独立表单,并且如果您的语言总是将日期符号(例如月份名称或工作日名称)显示在日历页面上或作为一个菜单项(但不是当它出现在句子的中间),那么独立的表单可以用于日期符号的大写版本。但是,还有其他解决方案可以使日期符号大写更精细控制资本化,参见资本化指南。
(重点补充)。
正如你的测试显示的那样,英语总是大写,意大利语是独立的(而不是句子),而西班牙语从不使用大写。我相信区域设置数据。