Skip to main content

国际化

例子#

基本用法#

examples/unit/app/app-lang-auto.ts

以下是国际化的基本例子,演示了切换按钮上的中英文文案:

i18n basic

我们用的是 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();}

API#

export interface IApp {    LangSetDefaultString(cid: CultureId, v: any): App;    LangSetCurrent(n: CultureId): App;}
export enum CultureId {    Default /**/ = -1,    en_us /**/ = 0,    ...    zh_cn /**/ = 562,    ...}