2012-12-05 74 views
1

我使用codenameone來開發我的移動應用程序。在這個應用程序中,我手動實現了一些類和代碼,例如,由於某種原因,通過硬編碼而不使用codenameone設計器來創建所有表單。lwuit更改UI語言

通過我想在像什麼codenameone使用形式進行切換的方法,所以我用一個變量的類型Form稱之爲prevForm,當我想打開窗體我將它設置爲目前的形式,然後我會告訴新形式。

好吧,那是主要場景。在這個應用程序中我也想實現國際化,所以我爲這個應用程序創建了自己的哈希表(波斯語和英語)。

這是我的問題:

  1. 如何設置或更改語言,並將其應用到我開的形式?

  2. 我的表單之間的導航方法是好的嗎?

這裏是我的代碼:

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

回答

2

我也硬編碼我的UI在lwuit上,並且我在每個類上都有一個可變的parentForm所以我可以輕鬆地顯示以前的表單。對於我知道的語言改變,可以在資源編輯器中使用本地化。以下是您如何訪問它。我猜訣竅是如何在代碼中的res文件中設置L10N的內容?另一方面,你可以創建你自己的輔助類來鏡像下面的方法。

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

謝謝Ajibola,但我不能和我不想使用資源文件。此外,我不能使用此代碼(「esources.open(」/ theme.res「);」)。 – Ahmad

+0

好吧,您將不得不創建自己的幫助器方法,類似於lwuit如何處理它們,或者使得android更好地完成它,也就是說,您可以使用相應的轉換保存id並在需要時從中獲取該id適當的翻譯。 – Ajibola

+0

好的,但我不知道如何將其應用於一種稱爲語言形式的形式。我該怎麼做? – Ahmad