0
私は少し複雑に思えるので、多言語角型アプリケーションのこの単純なアプローチを実装しました。シングルトンインスタンスと新しいインスタンスとの比較対多言語用のTypescriptでの角4角笛アプリケーション
だから我々は、このインターフェイスがあります。
export interface Messages {
welcome: string;
msg1: string;
msg2: string;
dynamic: (user: string) => string;
}
をし、我々はこのように、このインターフェイスを使用します。
クラス
import {Messages} from './messages';
export class MessagesEN implements Messages {
welcome = 'welcome';
msg1 = 'message one';
msg2 = 'hello second!';
dynamic = (user) => `hi ${user}`;
}
シングルトン
import {Messages} from './messages';
export class MessagesGR implements Messages {
private static _INSTANCE: Messages;
private constructor() {
}
static get INSTANCE(): Messages {
return this._INSTANCE || (this._INSTANCE = new this());
}
welcome = 'καλως ηρθατε';
msg1 = 'μηνυμα ενα';
msg2 = 'ειμαι ο δευτερος!';
dynamic = (user) => `γεια σου ${user}`;
}
のconst var
import {Messages} from './messages';
export const ALB: Messages = {
welcome: 'mire se erdhet',
msg1: 'mesazhi nje',
msg2: 'jam e duta',
dynamic: (user) => `si jeni ${user}`
};
その後、我々はMessagesService持っている:
import {Messages} from './messages';
import {MessagesGR} from './messages.gr';
import {ALB} from './messages.alb';
import {MessagesEN} from './messages.en';
export class MessagesService {
messages: Messages;
constructor() {
const lang = localStorage.getItem('lang');
this.init(lang);
}
public init(lang: string) {
switch (lang) {
case 'alb':
this.messages = ALB;
break;
case 'en':
this.messages = new MessagesEN();
break;
case 'gr':
default:
this.messages = MessagesGR.INSTANCE;
}
}
}
をして、コンポーネントのHTMLに、私たちはMessagesServiceを使用しています。 いずれもうまく動作します。
私の質問は優れている方法である(パフォーマンスとメモリ賢明)
- のconst VAR(ALB)
- クラス(EN)
- シングルトン(GR)
角型インジェクタは、すべてのクラスを熱心に初期化しますが、これはユーザーにとっては言語を変更しないようにするための最良の方法だとは思いません。 –
注入されるとすぐに遅延して初期化されます。インスタンスの初期化を避けたい場合は、コンストラクタに注入するのではなく、 'injector.get(messageServiceToken)'を使ってインスタンスを取得してください。これは時期尚早の最適化と考えることができます。アプリ内ですべての言語を定義する必要があります。 – estus