2010-10-20 3 views
5

Bonjour, j'ai une question de Wicket i18n: J'ai un fichier javaScript, qui contient des chaînes que je veux localiser. Idéalement, je veux localiser l'ensemble du fichier. Quelque chose commeComment localiser les fichiers javascript dans le guichet

  • my.js
  • my_de.js
  • my_fr.js
  • ...

où choisit automatiquement le wicket fichier de droite, comme il le fait avec les fichiers de propriété .

Quelqu'un sait comment faire cela?

Répondre

8

passer le paramètre régional à la référence des ressources:

class MyPage extends WebPage implements IHeaderContributor { 
    public void renderHead(IHeaderResponse response) { 
     response.renderJavascriptReference(new ResourceReference(
     MyPage.class, "my.js", getLocale(), getStyle())); 
    } 
} 
+0

J'ai trouvé une solution qui utilisait PackageResource, mais la vôtre est encore plus courte. Merci beaucoup. – nebenmir

0

La solution réelle fonctionne si les chaînes sont déjà dans le Javascript files.But ce qui se passe lorsque vous avez localisé des chaînes dans votre base de données et que vous voulez les passer à votre code Javascript? Vous pouvez créer un fichier XML nommé YourPageJS.xml et stocker le code Javascript identifié par certaines touches.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 
<properties> 

    <entry key="showModal"> 
    <![CDATA[ 

     $(''#{0}'').modal(''show'',{1}); 

    ]]> 
    </entry> 
</properties> 

Vous appelez ce code par la méthode suivante qui se trouve dans une classe utilitaire, en passant vos paramètres:

public static String getJsByClass(Class clazz, String name, Object... params) 
    { 
     ResourceBundle resources = ResourceBundle.getBundle(clazz.getName() 
       + "JS", Locale.getDefault(), 
       new XMLResourceBundleControl()); 

     String mesaj = resources.getString(name); 
     mesaj = MessageFormat.format(mesaj, params); 

     return mesaj; 
    } 

L'appel ressemble à ceci:

YourUtils.getJsByClass(YourPage.class, "showModal" ,"firstParameter","secondParameter"); 

où les paramètres pourrait être vos chaînes localisées.Dans le cas ci-dessus, le premier paramètre est l'ID de balisage.Vous pouvez l'ajouter à votre tête html comme ceci:

response.render(JavaScriptHeaderItem.forScript(YourUtils.getJsByClass(YourPage.class, "showModal" ,"firstParameter","secondParameter"), "yourJSid")); (Wicket 6)

En outre, dans le XML vous devez transformer deux caractères: ' devient '' et { devient '{' pour des raisons d'analyse syntaxique.

Questions connexes