今天早上起来,我正在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!