记:解决angular报错'Missing locale data for the locale "zh-cn"

今天早上起来,我正在happy的敲代码,ng serve之后报了个大红叉!

代码逻辑如下

formatDate(date: Date, format: string): string {
    let local = this.getLocale();
    // local.local = 'zh-cn'
    let re = this.datePipe.transform(date, format, null, local.locale);
    return re;
}
复制代码

当我尝试把zh-cn换成en时,代码正常跑起来了,问题是你妈满屏的鸟文!! 于是乎,我开始翻看ng源码,发现了这个鸟东西!

// 缓存语言
export const LOCALE_DATA: {[localeId: string]: any} = {};

export function findLocaleData(locale: string): any {
  const normalizedLocale = locale.toLowerCase().replace(/_/g, '-');
  // 关键点在这里
  let match = LOCALE_DATA[normalizedLocale];
  if (match) {
    return match;
  }
  const parentLocale = normalizedLocale.split('-')[0];
  match = LOCALE_DATA[parentLocale];
  if (match) {
    return match;
  }
  // 这尼玛,不敢直视,直接内置,好吧,内置就内置吧,不管他了
  if (parentLocale === 'en') {
    return localeEn;
  }
  throw new Error(`Missing locale data for the locale "${locale}".`);
}
复制代码

接着翻看,找到设置本地语言函数

export function registerLocaleData(data: any, localeId?: string | any, extraData?: any): void {
  if (typeof localeId !== 'string') {
    extraData = localeId;
    localeId = data[LocaleDataIndex.LocaleId];
  }

  localeId = localeId.toLowerCase().replace(/_/g, '-');

  LOCALE_DATA[localeId] = data;

  if (extraData) {
    LOCALE_DATA[localeId][LocaleDataIndex.ExtraData] = extraData;
  }
}
复制代码

汉化语言包

function plural(n: number): number {
  return 5;
}
export const extra =  [
  [
    ['午夜', '早上', '上午', '中午', '下午', '晚上', '凌晨'],
    ,
    ['午夜', '清晨', '上午', '中午', '下午', '晚上', '凌晨']
  ],
  [['午夜', '早上', '上午', '中午', '下午', '晚上', '凌晨'], ,],
  [
    '00:00',
    ['05:00', '08:00'],
    ['08:00', '12:00'],
    ['12:00', '13:00'],
    ['13:00', '19:00'],
    ['19:00', '24:00'],
    ['00:00', '05:00']
  ]
];

export const zhcn = [
  'zh-Hans',
  [['上午', '下午'], ,],
  ,
  [
    ['日', '一', '二', '三', '四', '五', '六'],
    ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
    ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
    ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
  ],
  ,
  [
    ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
    [
      '1月',
      '2月',
      '3月',
      '4月',
      '5月',
      '6月',
      '7月',
      '8月',
      '9月',
      '10月',
      '11月',
      '12月'
    ],
    [
      '一月',
      '二月',
      '三月',
      '四月',
      '五月',
      '六月',
      '七月',
      '八月',
      '九月',
      '十月',
      '十一月',
      '十二月'
    ]
  ],
  ,
  [['公元前', '公元'], ,],
  0,
  [6, 0],
  ['y/M/d', 'y年M月d日', , 'y年M月d日EEEE'],
  ['ah:mm', 'ah:mm:ss', 'z ah:mm:ss', 'zzzz ah:mm:ss'],
  ['{1} {0}', , ,],
  ['.', ',', ';', '%', '+', '-', 'E', '×', '‰', '∞', 'NaN', ':'],
  ['#,##0.###', '#,##0%', '¤#,##0.00', '#E0'],
  '¥',
  '人民币',
  {
    AUD: ['AU$', '$'],
    CNY: ['¥', '¥'],
    ILR: ['ILS'],
    JPY: ['JP¥', '¥'],
    KRW: ['₩', '₩'],
    TWD: ['NT$'],
    USD: ['US$', '$']
  },
  plural
];
复制代码

注册语言包,然后畅通无阻

import { zhcn, extra } from './zh-cn/index';
registerLocaleData(zhcn, 'zh-cn', extra);
复制代码

小结

keep learning!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值