ohayolibs
Version:
Ohayo is a set of essential modules for ohayojp.
62 lines (49 loc) • 1.46 kB
text/typescript
import { Injectable, InjectionToken } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
import { filter } from 'rxjs/operators';
export interface OhayoI18NService {
[key: string]: any;
/**
* 调用 `use` 触发变更通知
*/
readonly change: Observable<string>;
/**
* 变更语言
* @param lang 语言代码
* @param emit 是否触发 `change`,默认:true
*/
use(lang: string, emit?: boolean): void;
/**
* 返回当前语言列表
*/
getLangs(): any[];
/**
* 翻译
* - `params` 模板所需要的参数对象
* - `isSafe` 是否返回安全字符,自动调用 `bypassSecurityTrustHtml`
*/
fanyi(key: string, params?: {}, isSafe?: boolean): string;
}
export const OHAYO_I18N_TOKEN = new InjectionToken<OhayoI18NService>('ohayoTranslatorToken', {
providedIn: 'root',
factory: OHAYO_I18N_TOKEN_FACTORY,
});
export function OHAYO_I18N_TOKEN_FACTORY(): OhayoI18NServiceFake {
return new OhayoI18NServiceFake();
}
({ providedIn: 'root' })
export class OhayoI18NServiceFake implements OhayoI18NService {
private change$ = new BehaviorSubject<string | null>(null);
get change(): Observable<string> {
return this.change$.asObservable().pipe(filter(w => w != null)) as Observable<string>;
}
use(lang: string): void {
this.change$.next(lang);
}
getLangs(): any[] {
return [];
}
fanyi(key: string): string {
return key;
}
}