国际化
#
例子#
基本用法以下是国际化的基本例子,演示了切换按钮上的中英文文案:
我们用的是 LangSetDefaultString
去设置具体用到的语言翻译数据, 然后用 LangSetCurrent
去设置当前语言。
国际化的支持是内置的,就是说,只要你创建 UI 组件的时候,传了相应参数(对应文案的 key),当你切换语言的时候,UI 组件上的文案是自动改变的。
interface ILang { // 内置的一些key,AppTitle是左上角窗口名 AppTitle: string;
// 自定义的key SwitchLang: string;}
interface Ii18n { t(key: keyof ILang): string; switch(id: CultureId): void; lang: Partial<Record<CultureId, ILang>>;}
export function run() { const app = new App();
const i18n: Ii18n = { t(key: keyof ILang) { return app.LangGetString(key); }, switch(this: Ii18n, id: CultureId) { app.LangSetDefaultString(id, this.lang[id]); app.LangSetCurrent(id); }, lang: { [CultureId.en_us]: { AppTitle: 'My App', SwitchLang: 'Switch Lang', }, [CultureId.zh_cn]: { AppTitle: '我的应用', SwitchLang: '切换语言', }, }, };
globalThis.app = app;
const cpWindow = new WindowCreation(); cpWindow.Flag |= WindowFlag.Layered;
const window = new Window(cpWindow); globalThis._window = window;
window.OnCreateContent((sender) => { // let lang = CultureId.en_us; i18n.switch(lang);
// const button = new Button(window, 'SwitchLang' as keyof ILang);
button.OnClick((sender) => { if (lang === CultureId.en_us) { lang = CultureId.zh_cn; } else if (lang === CultureId.zh_cn) { lang = CultureId.en_us; } i18n.switch(lang); });
const container = getControlDemoContainer(window); container.ControlAdd(button).SetGrid(1, 1); window.SetContent(container); return true; });
if (!window.CreateWindow()) process.exit(-1);
window.SetVisible(true); window.Activate();}
#
APIexport interface IApp { LangSetDefaultString(cid: CultureId, v: any): App; LangSetCurrent(n: CultureId): App;}
export enum CultureId { Default /**/ = -1, en_us /**/ = 0, ... zh_cn /**/ = 562, ...}