0

我需要扩展预定义的角度日期管道格式列表(您可以在此处查看),其格式仅包含月份和年份,例如 05/2020 表示“en”或 05.2020 表示“de”,必须本地化。有没有正确的方法来做到这一点?我知道可以创建自己的管道并使用一些需要的格式进行扩展,但是当我指示格式时,例如“MM/yyyy”,它将使用该格式为每个语言环境格式化每个日期,但我需要将其本地化,所以我需要将我的自定义格式添加到已经存在的功能中。

我有一个想法用moment.js而不是使用角度日期管道,另一个想法是从已经本地化的字符串中手动删除日期(我同意非常愚蠢的想法),但我已经没有想法了实际上。

有什么简单的方法吗?还是必须在这里定义其他方法?

4

1 回答 1

0

我遇到了这个问题,我找到的最简单的解决方案是创建共享服务方法,该方法通过本地化返回日期格式的字符串

getDateFormat(format?: 'full' | 'short'): string {
        if (format === 'full') {
            return this.translateService.currentLang === 'en'
                ? 'MMM dd, yyyy, HH:mm:ss'
                : 'dd. MMM yyyy, HH:mm:ss';
        }
        if (format === 'short') {
            return this.translateService.currentLang === 'en'
                ? 'MMM dd, yyyy'
                : 'dd. MMM yyyy';
        }
    }

我这里有比一种格式更多的格式,但您可以轻松地使用一种格式,只需检查用户使用的语言:

getDateFormat(): string {
  return this.translateService.currentLang === 'en' 
    ? 'MMM dd, yyyy, HH:mm:ss'
    : 'dd. MMM yyyy, HH:mm:ss';
)

更新:

由于我有更多经验,因此想在您拥有多种语言的情况下分享一些不同的方法:

getDateFormat(): string {
  const formatsByLocale = {
    'en': 'MMM dd, yyyy, HH:mm:ss'
  }
  const format = formatsByLocale[this.translateService.currentLang]
  return format || 'dd. MMM yyyy, HH:mm:ss';
)

想法是您可以拥有许多具有不同格式的不同语言环境并访问具有相同 currentLang 属性的语言环境,而无需指定语言。在我看来,这使它更具可重用性和可读性。顺便说一下||,当没有格式时,它会使用默认的符号,无论该符号后面是什么。

于 2020-10-07T13:41:15.420 回答