2017-04-07 126 views
2

我正在國際化我的gwt應用程序,我有幾個SafeHtmlTemplate,我正在使用,我不知道如何翻譯。有沒有一種方便的方式來翻譯這些,同時仍然使用SafeHtmlTemplate方法?否則,我是否會像往常一樣將星期幾的名稱傳遞給模板並使用Constants來翻譯它們?GWT SafeHtmlTemplate國際化

@Template("<table>" + 
      "<tr><td>Sunday:</td>{6}</tr>" + 
      "<tr><td>Monday:</td>{0}</tr>" + 
      "<tr><td>Tuesday:</td>{1}</tr>" + 
      "<tr><td>Wednesday:</td>{2}</tr>" + 
      "<tr><td>Thursday:</td>{3}</tr>" + 
      "<tr><td>Friday:</td>{4}</tr>" + 
      "<tr><td>Saturday:</td>{5}</tr>" + 
      "</table>") 
    SafeHtml hoursHtml(SafeHtml mon, SafeHtml tue, SafeHtml wed, SafeHtml thu, SafeHtml fri, SafeHtml sat, SafeHtml sun); 

回答

0

既然沒有辦法用一個模板,像你這樣有UiBinder模板裏面做的一個Constants對象,我會說你獲得了翻譯的字符串模板外,然後將它們作爲參數將是方法下一個更容易的選擇。

此外,它提到的時間,並再次全部通過用於建立SafeHtml對象的字符串必須在編譯時已經確定的GWT的SafeHtml文檔:

public interface SafeHtmlTemplates
促進編譯時的標籤界面綁定HTML模板以生成SafeHtml字符串。

public static SafeHtml fromSafeConstant(java.lang.String s)
返回一個由安全字符串構造的SafeHtml,即不會轉義字符串。
重要提示:爲使此方法能夠遵守SafeHtml合同,此方法的所有用途必須滿足以下約束條件:
1.參數表達式必須在編譯時間的處完全確定。
2.參數的值必須以「內部HTML」上下文結束,並且不包含不完整的HTML標記。

使用Constants模板內部的SafeHtml模板可能會干擾此規則。有人可能會爭辯說,所有常量都被內聯,並且已經在編譯時生成了代碼的國際化排列,所以在模板內使用常量時應該相對容易地克服這些限制;但是再一次,谷歌可能已經以一種不允許兩種機制安全混合的方式實施它,因此限制。

所以只需將翻譯的字符串作爲參數傳遞(可能)的方式。