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

dan*_*oid 5 javascript localization date angularjs angular-bootstrap

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

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

因为它看起来默认MMMM代表一般情况下的月份名称,这通常是有道理的.

虽然我注意到在俄语波兰语的角度语言环境文件中,有一个属性STANDALONEMONTH,正如我所见,代表月份名称.(虽然乌克兰文件缺少那部分)

虽然我不太确定如何使用它们.我的基本建议是与装饰师一起去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'
Run Code Online (Sandbox Code Playgroud)

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

n13*_*313 2

当我前段时间在 Angular 1.3 中处理类似问题时,我在内置语言环境服务中找不到任何内容,因此我通过手动创建一个包含正确大小写翻译的列表并按月份编号引用这些列表来解决了这个问题, 就像是{{monthNamesNominative[monthNumber]}}哪里var monthNamesNominative = [\'\xd0\xaf\xd0\xbd\xd0\xb2\xd0\xb0\xd1\x80\xd1\x8c\', \'\xd0\xa4\xd0\xb5\xd0\xb2\xd1\x80\xd0\xb0\xd0\xbb\xd1\x8c\', ...]。这里的额外好处是,您可以直接控制字符串,并且如果您需要稍微不同的大小写,则不必进行额外的跳转。

\n\n

话虽如此,Angular 1.5 中的区域设置服务LLLL在主格情况下具有带有月份名称的标记,并且似乎在您提出此问题四天后,该错误 Angular 中阻止其正确使用的已修复,并且从版本 1.5.1 开始使用它相反可能更好。

\n