【问题标题】:How to handle month names inflection - Angular date localization如何处理月份名称的变化 - 角度日期本地化
【发布时间】:2016-02-07 11:47:44
【问题描述】:

我最近遇到了一个问题 - 在我的 Angular 应用程序的某些部分中,我必须以以下格式显示日期: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'

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

【问题讨论】:

  • 不太清楚为什么如果您包含正确的$locale 资源,您看不到正确的值。演示可能会有所帮助
  • @charlietfl 我得到了正确的值。当然在某种程度上。你是对的,我将添加示例。谢谢。
  • 我个人甚至不熟悉这些语言的细微差别。我可以想象,尽管许多其他人都遇到了这个问题。你检查过github问题吗?
  • @charlietfl 是的,我检查了 angularjs 和 angular-ui/bootstrap 问题。不过,由于 Angular 语言环境文件中有一个 STANDALONEMONTH 属性 - 我想这种情况已经得到处理。我试图弄清楚是否有处理这些问题的标准方法,因为我找不到任何方法。
  • “在语言环境文件中有一个属性 STANDALONEMONTH。虽然我不太确定如何使用这些属性。” 在角度 docs 我可以看到新日期元素“LLLL”:一年中的独立月份(1 月至 12 月)。文档版本显示为 v1.5.1-build.4664(快照)构建。在早期的文档中没有“LLLL”元素。可能会在下一个公共版本中添加“LLLL”。我认为语言环境文件刚刚修复。

标签: javascript angularjs date localization angular-bootstrap


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多