簡體   English   中英

我想在運行時更改SWT應用程序的語言。 怎么做?

[英]I want to change the language of a SWT Application at Runtime. How to do that?

我正在為我的軟件工程課開發一個應用程序,其中之一是接口中必須有2種或更多種語言。 我已經實現了。 另一方面,要求用戶可以通過從組合框等中進行選擇來自行更改語言。

當我使用AWT和Netbeans時,我無法編輯表單的initComponents方法,因為它是自動生成的。 我在心中有以下選擇,但不知道它們是否還能工作,所以我正在尋求幫助。

-編輯類的構造函數,使其看起來像這樣:

public JFmyConstructor() {
    initComponents(); //auto-generated
    myInitMethod();
}

我想我會發現的問題是,我需要在接口已經運行之后調用構造函數一次(因此,所有對象都實例化了。是否有解決方法?

可能我的答案來得有點晚(可惜您輸入的標題錯誤)...

顯然,您無需調用任何構造函數即可在運行時切換語言。 在Java Desktop應用程序中,它很簡單:

Locale brazilian = new Locale("pt", "BR");
Locale.setDefault(brazilian);

當然,如果要通過JComboBox進行切換,則可能會有所不同。 我會做的是,實際上將創建一個模型(Swing提倡MVC設計模式)來保存數據(不同的語言環境),並在正確的ActionListener中設置默認語言環境。 不過這並不容易。

當然,我寧願使用本地名稱作為語言環境。 如果已構建它們,則可以通過簡單地調用getDisplayName()並將其自身作為參數傳遞來輕松獲得本地名稱Locale名稱:

String brazilianNativeName = brazilian.getDisplayName(brazilian);

對於某些語言環境,結果可能無法令人滿意(我相信不幸的是巴西葡萄牙語是其中的一種),但是您對此無能為力(除非您使用自己的字符串)。

老實說,對於兩種語言,我可能會改用一些鏈接。 您可以使用簡單的JLabel來做到這一點,只需設置正確的字體屬性和顏色並分配通用的ActionListener即可。 然后,您可以查詢實際單擊了哪一個,並適當地創建和設置Locale。 對於家庭作業來說應該足夠了。

SWT和NetBeans是一個奇怪的組合。 如果您可以使用SWT以“正常”方式進行操作並使用Eclipse,那么將有一套強大的工具來管理本地化,所有這些工具都是內置的。例如,請參見本介紹。

最好的方法是對所有組件使用資源注入 (而不是在面板構建時從Bundle中獲取i18n字符串)。

在許多開源庫或框架中都可以使用資源注入。

由於使用NetBeans,因此您應該能夠基於已經支持資源注入的Swing應用程序框架 (SAF)生成應用程序。

否則,那里也有圖書館可以做到這一點。 只需在Google上搜索“ swing”“資源注入”即可,例如Fuse庫。

編輯:您還應該看看這個SO問題該問題恰好處理相同的問題,並且有更詳細的答案(包括我自己的問題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM