javascript - 如何处理月份名称变化 - Angular 日期本地化

标签 javascript angularjs date localization angular-bootstrap

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

基本问题是在某些语言中,主格和属格中月份的拼写不同。在我的例子中是波兰语、乌克兰语和俄语。

默认情况下,MMMM 代表属格中的月份名称,这通常是有道理的。

尽管我注意到在 Russian 的 Angular 语言环境文件中和 Polish语言有一个属性 STANDALONEMONTH ,正如我所见,它代表主格中的月份名称。 (尽管 Ukrainian 的文件缺少该部分)

虽然我不太确定如何使用它们。 我的基本建议是为 dateFilter 使用装饰器。

所以问题是 - 是否有一个标准的 Angular 处理月份名称变形的方法,或者一个常用的解决方法,以便第三方库使用 $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'

如您所见 - 对于乌克兰语和波兰语,月份的名称在这两种情况下应该有不同的结尾。对于波兰语和俄语, Angular 语言环境文件 (STANDALONEMONTH) 中也有一个大小写正确的月份名称。虽然我不太确定它们在任何地方都被使用 - 无法找到用法,或者我可能遗漏了一些东西。

最佳答案

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

话虽如此,Angular 1.5 中的语言环境服务在主格中有带月份名称的 LLLL 标记,并且似乎在你问这个问题四天后 bug Angular 中阻止其正确使用的问题已修复,从 1.5.1 版开始使用它可能会更好。

关于javascript - 如何处理月份名称变化 - Angular 日期本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35253058/

相关文章:

javascript - 在 Angular Controller 中包含 JSON 时出现问题

python - Django - 使用 strftime 返回德语日期

javascript - 停止缩放 D3 世界地图中的气泡

Javascript 从外部站点获取 html

javascript - 在 Vuex 模块中进行继承的方法

javascript - Angular JS 和 IE11

javascript - 在删除链接弹出窗口中,您确定吗

javascript - 从远程服务器无限滚动 Angular

JavaScript 日期 + 7 天

python - 无法使用钟摆来解析系列中的日期,但可以一一解析