2010-10-12 57 views
1

我的問題是以下內容:GWT gwt i18n杜松子酒模塊

我得到一個應用程序與GWT運行。 在應用程序啓動時,加載一個擴展AbstractGinModule或另一個GWTClientModule的GWTClientModule。

基於那個開關我想設置本地。 有沒有辦法做如下設置本地不直接以html:

<meta name="gwt:property" content="locale=fr"> 

而是直接在選擇GWTClientModule之一?

非常感謝你的善意幫助;-)

+0

顯然只有兩種方法來指定區域設置:1 /在主機頁面我們定義。 2 /在網址中加入「?locale = fr」。真的嗎?服務器端或使用web.xml或gwtclientmodule或其他方式都不可能... – AbstractMan 2010-10-12 15:23:10

回答

1

你不能這樣做,如果你使用static String internationalization,因爲它使用deferred binding:GWT編譯器生成每個區域的一個JavaScript文件,而當你的頁面加載,在加載適當版本的代碼之前,GWT引導腳本在頁面(或URL中)內查找「locale」屬性。

選擇編程語言環境(您GWTClientModule內)是不可能的,因爲你的代碼的本地化版本已經一次加載代碼執行...

如果你真的需要在運行時選擇的語言環境,你可能想看看dynamic String internationalization,但它性能較差,你失去了靜態類型檢查。

+0

感謝您的回覆。我將首先看到動態的String國際化。或者我可以在構建過程中替換.properties文件。無論如何,感謝您的解釋:-) – AbstractMan 2010-10-13 07:43:21

+0

當您在構建期間討論替換.properties文件時,我必須問:您的最終目標是什麼?你只是想編譯一個特定的區域? 因爲您可以通過將以下內容添加到Module.gwt.xml中來實現這一點: 更多信息,請訪問:http://stackoverflow.com/questions/1745315/how-to-create-a-development-debug-and-production-setup/1749507 – 2010-10-13 10:59:12

0

我們在此基於this根據客戶端瀏覽器語言設置了區域設置。

只要下面的JavaScript添加到您的.html:

<script type="text/javascript"> 
var search = location.search; 
if(search.indexOf("locale") == -1){ 
    var lang = navigator.language!= null ? navigator.language : navigator.browserLanguage; 
    lang = lang.replace("-", "_"); 
    var metaTag = document.createElement('meta'); 
    metaTag.name = "gwt:property"; 
    metaTag.content = "locale=" + lang; 
    document.getElementsByTagName('head')[0].appendChild(metaTag); 
} 
</script> 

它看起來如果對應於區域設置META標記未設定,如果沒有它查找瀏覽器語言,並添加適當的meta標籤,EG:

<meta name="gwt:property" content="locale=fr"> 
+0

由於Etienne Neveu上面解釋的原因,這對GWT不起作用。使用靜態字符串國際化時,其他語言環境的文本根本不可用。它被硬編碼到爲特定排列生成的GWT編譯生成的HTML/JS。 – Chepech 2013-05-01 16:48:26

+0

我們在我工作的內部項目中使用過它,你嘗試過嗎? – David 2013-05-02 20:51:25

+0

我很確定你沒有使用靜態字符串方法。 – Chepech 2013-07-02 21:29:55