如何处理月份名称变形 - 角度日期本地化

时间:2016-02-07 11:47:44

标签: javascript angularjs date localization angular-bootstrap

我最近遇到了一个问题 - 在我的角度应用程序的某些部分,我必须以下列格式显示日期:MMMM yyyy,以及Angular UI Bootstrap框架的某些组件。

基本问题是,在某些语言中,主格和属格案例中的月份拼写不同。在我的情况下,这将是波兰语,乌克兰语和俄语。

默认似乎MMMM代表属格案例中的月份名称,这通常是有意义的。

虽然我已经注意到在RussianPolish语言的角度区域设置文件中有一个属性STANDALONEMONTH,正如我所见,它代表着名字中的月份名称。 (虽然Ukrainian的文件缺少该部分)

虽然我不太确定如何使用它们。 我的基本建议是与dateFilter的装饰者一起使用。

所以问题是 - 是否有角度的月份名称变形处理的标准方法,或者常用的变通方法,以便使用$locale的第三方库使用正确的月份名称。

示例

date: '2016-01-20'

en-us: 
'dd MMMM yyyy' -> '20 January 2016'  
'MMMM yyyy'    -> 'January 2016'    

uk-ua: 
'dd MMMM yyyy' -> '20 січня 2016'    // genitive case - it is fine
'MMMM yyyy'    -> 'січня 2016'      // wrong: should be 'січень 2016'

pl-pl: 
'dd MMMM yyyy' -> '20 stycznia 2016' // genitive case - it is fine
'MMMM yyyy'    -> 'stycznia 2016'    // wrong: should be 'styczeń 2016'

如你所见 - 对于乌克兰语和波兰语,这两个月的名字应该有不同的结局。对于波兰语和俄语,在角度语言环境文件(STANDALONEMONTH)中有适当的月份名称。虽然我不太确定它们在任何地方都可以使用 - 但是找不到用法,或者我错过了一些东西。

1 个答案:

答案 0 :(得分:1)

当我在Angular 1.3中处理类似问题时,我无法在内置语言环境服务中找到任何内容,所以我通过手动创建一个包含正确大小的翻译列表和引用来解决这个问题那些按月份编号的内容,例如{{monthNamesNominative[monthNumber]}} var monthNamesNominative = ['Январь', 'Февраль', ...]。这里的额外好处是你可以直接控制字符串,如果你需要稍微不同的大小写,就不必做额外的跳转。

话虽如此,Angular 1.5中的语言环境服务在主格案例中有月份名称的LLLL令牌,看来你提出这个问题四天后Angular的bug无法正确使用是固定的,从版本1.5.1开始使用它可能更好。