基于ng-alain做国际化
1.下载需要下载的包
在package.json文件的dependencies下加入
“@ngx-translate/core”: “^13.0.0”,
“@ngx-translate/http-loader”: “^6.0.0”,
在终端输入npm install 下载这两个模块
2.加载支持i18n模块
2-1. 修改app.module.ts
加入加载i18n语言文件的代码:
import { ALAIN_I18N_TOKEN } from '@delon/theme';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { I18NService } from './core/i18n/i18n.service';
// 加载i18n语言文件
export function I18nHttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
return new TranslateHttpLoader(http, `/assets/i18n/`, '.json');
}
const I18NSERVICE_MODULES = [
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: I18nHttpLoaderFactory,
deps: [HttpClient],
},
}),
];
const I18NSERVICE_PROVIDES = [{ provide: ALAIN_I18N_TOKEN, useClass: I18NService, multi: false }];
在@NgModule修改providers
providers: [...LANG_PROVIDES, ...INTERCEPTOR_PROVIDES, ...I18NSERVICE_PROVIDES, ...APPINIT_PROVIDES],
… 在src/app/i18n/下创建i18n.service.ts
import {
Platform } from '@angular/cdk/platform';
import {
registerLocaleData } from '@angular/common';
import ngEn from '@angular/common/locales/en';
import ngZh from '@angular/common/locales/zh';
import ngJaJp from '@angular/common/locales/ja';
import {
Injectable } from '@angular/core';
import {
AlainI18NService,
DelonLocaleService,
en_US as delonEnUS,
SettingsService,
zh_CN as delonZhCn,
ja_JP as delonJaJp,
} from '@delon/theme';
import {
TranslateService } from '@ngx-translate/core';
import {
enUS as dfEn, zhCN as dfZhCn, ja as dfJaJp } from 'date-fns/locale';
import {
NzSafeAny } from 'ng-zorro-antd/core/types';
import {
en_US as zorroEnUS, NzI18nService, zh_CN as zorroZhCN, ja_JP as zorroJaJp } from 'ng-zorro-antd/i18n';
import {
BehaviorSubject, Observable } from 'rxjs';
import {
filter } from 'rxjs/operators';
interface LangData {
abbr: string;
text: string;
ng: NzSafeAny;
zorro: NzSafeAny;
date: NzSafeAny;
delon: NzSafeAny;
}
const DEFAULT = 'zh-CN';
const LANGS: {
[key: string]: LangData } = {
'zh-CN': {
text: '简体中文',
ng: ngZh,
zorro: zorroZhCN,
date: dfZhCn,
delon: delonZhCn,
abbr: '🇨🇳',
},
'ja-JP': {
text: '日本語',
ng: ngJaJp,
zorro: zorroJaJp,
date: dfJaJp,
delon: delonJaJp,
abbr: 'Ja',
},
'en-US': {
text: 'English',
ng: ngEn,
zorro: zorroEnUS,
date: dfEn,
delon: delonEnUS,
abbr: '🇬🇧',
},
};
@Injectable({
providedIn: