0

我正在尝试对format_date. 我想要大写的月份名称,为此我使用MMMM yyyyor 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) 版本是错误的:月份名称为小写,forMMMMLLLL. 这是为什么?这是 Babel 中的错误吗?从意大利输出中,我预计MMMM是指小写字母和LLLL大写字母。大写月份名称的格式代码是什么?(这在文档中没有明确说明)

4

1 回答 1

2

西班牙语月份名称是小写的

日历:一周中的日子和一年中的月份的名称使用小写字母。霍伊斯马尔特斯。(今天是星期二。) 9 月 16 日,墨西哥庆祝独立。(墨西哥于 9 月 16 日庆祝独立。)


你想深入挖掘为什么 Babel 有两个格式字母。干得好。

你是对的,这在文档中没有明确说明,但是通过阅读源代码,我能够弄清楚使用L而不是M更改调用context的参数。源代码显示:get_month_names

  • 'M'结果为“格式”
  • 'L'导致“独立”

那些是什么意思?好吧,进一步挖掘我发现 Babel 使用CLDR 数据文件。这是 Unicode Consortium 指定的格式,事实证明,所有内容都在此处进行了解释,包括该格式,'M'并且'L'是标准。

一些语言根据上下文使用两种不同形式的字符串(独立和格式)。通常,单机版本是单词的主格形式,而格式版本是属格。使用了两个不同的字符:

Field  Format  Stand Alone
Month  M       L

“格式”显然是您通常想要的,因为它的意思是月份出现在日期旁边。

最后,它确实继续包含关于大写的注释:

如果由于上述任何语法原因不需要独立表单,并且如果您的语言在日历页面上或作为菜单项单独出现时总是将日期符号(例如月份名称或工作日名称)大写(但不是当它出现在句子中间时),那么独立形式可以用于日期符号的大写版本。但是,还有其他将日期符号大写的解决方案可以更好地控制大小写,请参阅大写指南。

(强调补充)。

正如您的测试所示,英语总是大写,意大利语大写独立(但不是句子),西班牙语从不使用大写。我会相信语言环境数据。

于 2013-09-18T06:07:27.183 回答