lwuit改变UI语言

时间:2012-12-05 07:54:37

标签: internationalization lwuit lwuit-form

我使用codenameone来开发我的移动应用程序。在这个应用程序中,我手动实现了一些类和代码,例如,由于某些原因,不使用codenameone设计器通过硬编码创建所有表单。

顺便说一下,我想用codenameone使用的形式导航,所以我使用Form类型中的一个变量称为prevForm,当我想打开一个表单时,我将其设置为当前形式,然后我显示新的形式。

好的,那是主要场景。在这个应用程序中,我也想实现国际化,所以我为这个应用程序创建了自己的哈希表(波斯语和英语)。

这是我的问题:

  1. 如何设置或更改语言并将其应用于我打开的表单?

  2. 我在表单之间导航的方法是否合适?

  3. 这是我的代码:

    public class BaseForm extends Form implements ActionListener {
    public BaseForm(){
        this.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
    }
    
    Command exit, ok, back;
    Form prevForm;
    
    protected void initForm(){
    
    }
    
    protected void showForm(){
    
    }
    
    protected void showForm(final Form prevForm){
        //String name = this.getName();
        //if("Reminder".equals(name) || "3Transaction".equals(name))
        {
            this.prevForm = prevForm;
            Form f = this;
            back = new Command("Back");
            //ok = new Command("Ok");
            //delete = new Command("Delete");;
            Button button = new Button("Button");
    
            f.addCommand(back);
            //f.addCommand(ok);
            //f.addCommand(delete);
            //f.addComponent(button);
    
            f.addCommandListener(new ActionListener() {
    
                public void actionPerformed(ActionEvent ae) {
                    if (ae.getCommand().equals(back)) {
                        //Do Exit command code
                        System.out.println("Back pressed");
                        prevForm.showBack();
                    } else if (ae.getCommand().equals(ok)) {
                        //Do Start command code
                        System.out.println("Ok pressed");
                    }
                }
            });
    
            button.addActionListener(new ActionListener() {
    
                public void actionPerformed(ActionEvent ae) {
                    //Do button code
                    System.out.println("Action performed");
                }
            });
        }
        showForm();
    }}
    

    对于打开的嵌套表单我使用此代码:

    LanguageUI lang = new LanguageUI();
    lang.showForm(this);
    

    更改语言[表单]:

    protected boolean onBtnSave() {
        if(isRbFarsiSelected()){
            UIManager.getInstance().setResourceBundle(new CommonSettings().getFarsi());
        }
        else {
            UIManager.getInstance().setResourceBundle(new CommonSettings().getEnglish());
        }
    
        return false;
    }
    

1 个答案:

答案 0 :(得分:2)

我也在lwuit上硬编码我的UI,并且我在每个类上都有一个变量parentForm,所以我可以很容易地显示以前的表单。对于语言更改,我知道您可以使用资源编辑器中的本地化。以下是如何访问它。我想诀窍是如何在代码中设置res文件中L10N的内容?另一方面,您可以创建自己的帮助程序类,以反映下面的方法。

Resources theme = Resources.open("/theme.res");
theme.getL10N(id, locale);
theme.getL10NResourceNames();
theme.isL10N(name);
theme.listL10NLocales(id)