UNPKG

ohayolibs

Version:

Ohayo is a set of essential modules for ohayojp.

62 lines (49 loc) 1.46 kB
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(); } @Injectable({ 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; } }