我通过设置以下属性来更改片段区域设置:
moment.locale(chosenLocale);
一切似乎都很好。我根据所选的区域设置获取月份名称和工作日名称。我也得到了正确的周数等计算。
使用默认(英语)语言环境,我得到月份名称,如1月,2月等。我也得到工作日的名字,如星期一,星期二等。出于某种原因,使用丹麦语语言环境我得到所有这些名称降低。格式化一个简单的工作日时,我可以将第一个字母大写,但对于一些更高级的格式,名称可能会交换顺序(January 1st
与1. 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
属性设置为函数,然后返回缓存月数组的大写值,其结果与描述的相同。
有没有人有解决方案?
答案 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'
即可查看所有属性,并使用上述方法从库外部更改这些属性。