在'es'语言环境中将月份名称大写

时间:2013-09-18 06:05:43

标签: python babel

我正在尝试为format_date使用自定义格式。我希望月份名称为大写,为此我使用的是MMMM yyyyLLLL 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)版本错误:月份名称为小写,适用于MMMMLLLL。这是为什么?这是巴贝尔的错误吗?从意大利语输出中,我预计MMMM表示小写,LLLL表示大写。大写月份名称的格式代码是什么? (documentation

中没有明确说明

1 个答案:

答案 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'

“格式”显然是您通常想要的,因为它意味着月份与日期一起出现。

最后,它确实包含关于大写的说明:

  

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

(重点补充)。

正如你的测试显示的那样,英语总是大写,意大利语是独立的(而不是句子),而西班牙语从不使用大写。我相信区域设置数据。