2012-01-30 102 views
3

在我的應用程序(GWT(EXT_GWT)+ Spring)中,我需要設置用戶(登錄後)他的母語,而不需要參數。例如:用戶在登錄表單填寫登錄&,然後以準備工作形式重定向(此表單必須使用本地用戶語言,我從db獲取的語言環境)。我的語言文件寫在.properties文件中,並在module.gwt.xml config中枚舉。GWT動態國際化

所以問題是 - 我如何設置語言?也許會議或後參數?但我不明白如何GWT加載頁面選擇需要的區域設置。一些在頁面加載之前在gwt上設置locale的方法?

謝謝!

回答

4

使用內置的國際化並按照預期使用它,您無法在不重新加載頁面的情況下執行此操作。內置i18n只依賴加載與選定語言環境相對應的編譯置換。這意味着你不能只添加一個元標記,你不能只是翻轉一個設置,你將無法從內置的LocalInfo類中讀取。

兩個選項,正如我所見。首先,重新加載更少的代價,這樣你就可以使用GWT自帶的i18n東西了。要做到這一點,通過創建新應用程序或使用分割點,從登錄名中分出應用程序的其餘部分,以便儘可能少地加載代碼。編譯文件應該是緩存,所以它不應該影響下載時間,只是啓動應用程序所花費的時間。

第二個選項,遵循不重載的約束:不要使用內置的I18n,而是根據運行時數據(與通常的編譯時方法相反)找到另一種拉入字符串的方法。

  • GWT文檔與Dictionary類這樣做,可以讓你從由JavaScript加載字符串(見http://code.google.com/webtoolkit/doc/latest/DevGuideI18n.html#DevGuideDynamicStringInternationalization)讀這樣的一個方式。這可以通過在登錄後使用這些字符串加載JS文件來完成(請考慮ScriptInjector,以便知道它何時準備就緒)。這還有一個好處,就是你不需要重新編譯來改變字符串,如果你認爲這是一個優點,並且缺點是你需要JS中的字符串,而不是java和屬性文件(儘管一些小心的服務器工作可能會允許你從java/properties生成那個js)。
  • 製作幾個I18n接口而不是一個接口。他們可能都應該實現一個通用接口,以便您可以將實例傳遞給需要它們的任何東西,窗口小部件等。此方法的問題是,當您使用內置I18n時,您正在編譯所有字符串,不管它們是否被使用。爲了改善這一點,考慮每個地區所需的分割點,並確保只加載其中的一個。
5

我認爲,從DB你應該重定向他receving用戶區域信息後,URL,例如(如果他是來自俄羅斯):

http://www.example.org/myapp.html?locale=ru 

例如,可以保存應用程序是在局部boolen標誌會話和執行該步驟:

  • 獲得當前區域LocaleInfo.getCurrentLocale().getLocaleName();
  • 與用戶的區域價值
  • 如果不同進行比較,獲得使用GWT.getModuleBaseURL()
  • 在結束
  • 化妝本地化標誌真正構建新的URL基於以前的基礎URL與?locale=locale_value並將其保存到會話基礎URL;
  • 重定向到新的URL中使用Window.Location.replace(newUrl)

例如localizeApp方法可能如下:

void localizeApp(User user) { 
     if (!localized) { 
     String currentLocale = LocaleInfo.getCurrentLocale().getLocaleName(); 
     if (!locale.equals(user.getLocale)) { 
      String url = GWT.getModuleBaseURL(); 
      String newUrl = url + "?locale="+currentLocale; 
      localized = true; //and save to session here 
      Window.Location.replace(newUrl); 
     } 
     }  
    } 

更多信息安博在GWT本地化您可以在這裏找到Internationalizing a GWT Application這裏Internationalizing a GWT Application 認爲這將有助於您!

+0

非常感謝BraginiNI,但我需要的方法沒有得到參數(你的URL方法):( – 2012-01-30 16:43:50

+1

可能是我錯了,但我想你不能用另一種方式實現這樣的邏輯。找到解決方案後它PLZ – BraginiNI 2012-01-30 16:47:25

+0

一種可能的方式 - 在JSP頁面的頁眉寫的語言環境,但我有html頁面:( – 2012-01-30 17:07:44