在momentjs中大写的月份名称

时间:2016-03-10 10:33:26

标签: javascript momentjs

我通过设置以下属性来更改片段区域设置:

moment.locale(chosenLocale);

一切似乎都很好。我根据所选的区域设置获取月份名称和工作日名称。我也得到了正确的周数等计算。

使用默认(英语)语言环境,我得到月份名称,如1月,2月等。我也得到工作日的名字,如星期一,星期二等。出于某种原因,使用丹麦语语言环境我得到所有这些名称降低。格式化一个简单的工作日时,我可以将第一个字母大写,但对于一些更高级的格式,名称可能会交换顺序(January 1st1. Januar),我不能只是大写第一个字母。< / p>

我正在使用此格式显示月份名称和月份日期:

moment().format('dddd LL')

丹麦语中我得7. marts 2016,但我真的想要7. Marts 2016。请记住,我需要解决方案适用于所有语言环境,因此我无法对月份名称进行硬编码 - 或者我可以吗?我尝试了以下方法:

moment.locale(chosenLocale);
var __months = moment.months().map(function (m) { return m.toUpperCase() + "TEST"; });
moment.locale(chosenLocale, {
    months : __months
}); 

我希望(出于测试目的)获得丹麦语言环境的JANUARTEST,但我得到januartest,暗示小写由其他地方的框架应用。我还尝试根据api文档将months属性设置为函数,然后返回缓存月数组的大写值,其结果与描述的相同。

有没有人有解决方案?

4 个答案:

答案 0 :(得分:10)

  

出于某种原因,使用丹麦语语言环境,我将所有这些名称都降低了。

这是有充分理由的。在丹麦语中,月份的名称没有大写。许多语言都没有将其月份或工作日的名称大写,包括西班牙语,法语,意大利语,俄语,and others

moment.js中的每个语言环境文件由该语言的至少一个母语使用者“拥有”。通常,您不应尝试更正自己代码中的大小写。如果您认为特定区域设置存在错误open an issue,我们可以从区域设置所有者那里获得输入。

请注意,我们提出了一些提供备用套件版本的请求,用于1)句子开头的例外情况,或2)单独站立时如列标题中所示。是否将这些资本化(特别是在第二种情况下)可以在不同语言之间有很大差异。截至目前,时刻并没有提供任何区别,并且总是针对通用案例。

也就是说,我尝试使用当前版本(2.12.0)的代码并且它确实有效,所以也许您使用的是处理这种情况的旧版本。但是,我收到了弃用警告,因为您应该使用updateLocale方法修改现有的语言环境,因此您的代码应更改如下:

moment.updateLocale(chosenLocale, { months : __months });

尽管如此,我仍然反对这一点,原因如上所述。

答案 1 :(得分:0)

您可以尝试CSS:

.selector .to .lowercase .element { text-transform: capitalize; }

如果有该选择器,则应大写任何字符串。

答案 2 :(得分:0)

只需使用.toUpperCase()

例如:

<Text>TARGET DATE: {Moment("10-jan-20").format('DD MMMM YYYY').toUpperCase()}</Text>

返回: “目标日期:2020年1月10日”

答案 3 :(得分:0)

我遇到的西班牙语同查尔斯·马丁(Charles Martin)用法语报道的一样。 谁曾使用小写字母全部用西班牙语翻译过的月份和日期名称,应该选择像英语一样在UpperCase中制作第一个字母。

通过此修复程序,如果需要,可以轻松转换所有.toLowerCase()

无法在.format('dddd, DD [de] MMMM')内将星期和月份中的第一个字母仅转换为大写,并且使其不位于外部,请推动我们使用另一个函数split,大写的第一个字母和联合来处理结果

在实施修复之前,我将坚持建议的解决方案以动态更新语言环境。

moment.locale('es');
var meses = 'Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre'.split('_');
var semanas = 'Domingo_Lunes_Martes_Miércoles_Jueves_Viernes_Sábado'.split('_');
moment.updateLocale('es', { months : meses, weekdays : semanas });

如果需要,还有其他东西需要替换。只需打开moment-with-locales.js文件并搜索hooks.defineLocale('es'即可查看所有属性,并使用上述方法从库外部更改这些属性。