bixi
Version:
企业级中后台前端解决方案
60 lines (50 loc) • 1.62 kB
text/typescript
import { Inject, Injectable, Optional } from '@angular/core';
import { log } from '@bixi/core/utils';
import { NzSafeAny } from 'ng-zorro-antd/core/types';
import { BehaviorSubject, Observable } from 'rxjs';
import zh_CN from '../langs/zh-CN';
import { BIXI_I18N } from './i18n.token';
import { II18nConfig } from './i18n.type';
import { getValue } from './i18n.util';
export class BixiI18nService {
private _locale!: II18nConfig;
private _change = new BehaviorSubject<II18nConfig>(this._locale);
get localeChange(): Observable<II18nConfig> {
return this._change.asObservable();
}
constructor(
locale: II18nConfig) {
this.setLocale(locale || zh_CN);
}
setLocale(locale: II18nConfig): void {
if (this._locale && this._locale.locale === locale.locale) {
return;
}
this._locale = locale;
this._change.next(locale);
}
getLocale(): II18nConfig {
return this._locale;
}
getLocaleId(): string {
return this._locale ? this._locale.locale : '';
}
getLocaleData(path: string, keyValue?: NzSafeAny): NzSafeAny {
let result = path ? getValue(this._locale, path) : this._locale;
if (!result) {
log(`[/core/i18n] failed to translate ${path},you can checkout bixiI18nService.setLocale.`);
}
if (typeof result === 'string') {
if (keyValue) {
Object.keys(keyValue).forEach(key => {
result = result.replace(new RegExp(`\\$\{${key}\}`, 'g'), keyValue[key]);
});
}
return result;
}
return result || path;
}
}