2015-05-18 166 views
0

正如標題所示,我需要GWT的i18n與UiBinder配合使用。我想用靜態i18n國際化我的應用程序。我用於學習的書只介紹了一種通過讓編譯器爲常量/消息和默認文件生成密鑰來國際化ui.xml文件的方法,但必須有一種更簡單的方法來執行此操作。這就是爲什麼我試圖使用UI:像這樣的標籤來使用我的國際化常數(在upFace內):GWT UiBinder I18n

<ui:with type="havis.ui.shared.resourcebundle.ConstantsResource" field="lang"></ui:with>  
<g:ToggleButton ui:field="observeButton"> 
     <g:upFace>{lang.observe}</g:upFace> 
     <g:downFace>Observing</g:downFace> 
</g:ToggleButton> 

這不起作用,按鈕顯示文本{} lang.observe這也似乎是合乎邏輯,但現在我的問題是:有沒有辦法使用這樣的常量?如果沒有人可以解釋我應該如何在UiBinder文件中使用常量(而不需要編譯器生成文件和密鑰)?

回答

2

Anywhere的HTML被接受(如upFace內),您可以使用<ui:msg><ui:text><ui:safehtml>(和任何地方的純文本的預期,您可以使用<ui:msg><ui:text>)。

所以你的情況:

<ui:with type="havis.ui.shared.resourcebundle.ConstantsResource" field="lang"></ui:with>  
<g:ToggleButton ui:field="observeButton"> 
    <g:upFace><ui:text from="{lang.observe}"/></g:upFace> 
    <g:downFace>Observing</g:downFace> 
</g:ToggleButton> 

http://www.gwtproject.org/doc/latest/DevGuideUiBinder.html#Hello_Text_Resourceshttp://www.gwtproject.org/doc/latest/DevGuideUiBinder.html#Hello_Html_Resourcesui:textui:safehtml

+0

謝謝,它工作正常! – Lunaetic

0

您可以使用常數是這樣的:

.ui.xml:

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'> 
<ui:with field="constants" type="my.client.resources.AppResources.AppConstants"/> 

<g:FlowPanel> 
    <g:Label text="{constants.label}"/> 
</g:FlowPanel> 

和AppResources接口:

public interface ApplicationResources extends ClientBundle { 

public static final ApplicationConstants CONSTANTS = GWT.create(ApplicationConstants.class); 

    public interface ApplicationConstants extends com.google.gwt.i18n.client.Constants { 

    @DefaultStringValue("my label") 
    String label(); 
    } 
} 

但對於國際化你真的應該遵循什麼樣的GWT手冊說,即 是沒有其他(乾淨)的方式比準備所有屬性文件(每種語言一個)並生成所有需要的排列。這主要是將 委託給GWT所有與語言檢測有關的東西,GWT提供的解決方案在運行時表現相當好。唯一的缺點是編譯時間 稍微高一些(因爲您將爲每個指定的語言的每個瀏覽器進行排列)。

+0

我已經發現了這種方式,但我不太喜歡它/:但謝謝你試圖幫助,我很欣賞它(: – Lunaetic