Internationalization lwuit更改用户界面语言

Internationalization lwuit更改用户界面语言,internationalization,lwuit,lwuit-form,Internationalization,Lwuit,Lwuit Form,我使用codenameone开发我的移动应用程序。在这个应用程序中,我手动实现了一些类和代码,例如通过硬编码创建所有表单,而不是出于某种原因使用codenameone designer 顺便说一句,我想在codenameone使用的表单中导航,所以我使用了Form类型中的一个变量,称之为prevForm,当我想打开表单时,我将其设置为当前表单,然后显示新表单 好的,这是主要的场景。在这个应用程序中,我也想实现国际化,所以我为这个应用程序创建了自己的哈希表(波斯语和英语) 这是我的问题: 如何设置

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

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

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

这是我的问题:

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

  • 我在表单之间导航的方法好吗

  • 这是我的密码:

    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;
    }
    

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

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

    谢谢Ajibola,但我不能也不想使用资源文件。此外,我不能使用此代码(“esources.open(“/theme.res”);”)。那么,您必须创建自己的帮助器方法,类似于lwuit处理这些方法或android,这是更好的方法,即,您保存一个id和相应的翻译,并在需要时从相应的翻译中获取该id。确定,但我不知道如何将它应用到一种叫做语言形式的形式中。我怎么做呢?假设我有三种形式“主”、“设置”、“语言”。我从“Main”开始,然后从“Main”打开“Setting”,然后从“Setting”打开“Language”(“Main”->“Setting”->“Language”)。在“语言”窗体中保存设置语言后,我希望它自动设置为所有窗体。不需要在语言窗体中显式设置语言,因为您可以通过编程获得用户操作的语言环境。字符串locale=System.getProperty(“microedition.locale”);我建议您在MIDlet启动时这样做,然后可以将语言路由到适当的哈希表。但要回答您的问题,最好的解决方案是使用一个表示当前语言的静态全局变量作为主要形式,当语言发生变化时,只需更改此变量,并在需要知道使用哪种语言时引用它。