2017-04-07 1 views
2

Je suis en train d'internationaliser mon application gwt et j'ai plusieurs SafeHtmlTemplate que j'utilise que je ne suis pas sûr de savoir comment traduire. Existe-t-il un moyen pratique de les traduire tout en utilisant l'approche SafeHtmlTemplate? Sinon, est-ce que je passerais simplement les noms des jours de la semaine au modèle et les traduirais en utilisant Constants comme d'habitude?GWT SafeHtmlTemplate Internationalisation

@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); 

Répondre

0

Comme il n'y a aucun moyen d'utiliser un objet Constants dans un modèle comme vous le feriez avec un modèle UiBinder, je dirais que votre approche d'obtenir les chaînes traduites en dehors du modèle, puis les passer en tant que paramètres seraient la prochaine option plus facile.

De plus, il est mentionné à maintes reprises tout au long de la documentation SafeHtml de GWT que les cordes utilisées pour construire des objets SafeHtml doivent être déjà déterminés au moment de la compilation:

public interface SafeHtmlTemplates
Une interface tag qui facilite compilation liaison de modèles HTML pour générer des chaînes SafeHtml.

public static SafeHtml fromSafeConstant(java.lang.String s)
Renvoie un SafeHtml construit à partir d'une chaîne sécurisée, c'est-à-dire sans échapper à la chaîne.
Important: Pour que cette méthode puisse respecter le contrat SafeHtml, toutes les utilisations de cette méthode doivent satisfaire aux contraintes suivantes:
1. L'expression de l'argument doit être entièrement déterminée à heure de compilation.
2. La valeur de l'argument doit se terminer dans le contexte "HTML interne" et ne pas contenir de balises HTML incomplètes.

L'utilisation de l'intérieur ConstantsSafeHtml modèles pourrait interférer avec cette règle.
On pourrait argumenter que toutes les constantes sont censées être en ligne, et que les permutations internationalisées du code sont déjà générées au moment de la compilation, il devrait donc être relativement facile de surmonter ces restrictions lors de l'utilisation des constantes dans les templates; mais là encore, Google pourrait l'avoir mis en œuvre d'une manière qui ne permet pas un mélange sûr des deux mécanismes, d'où la limitation. Donc, simplement passer les chaînes traduites en paramètres est (probablement) le chemin à parcourir.