Création d'une classe de fournisseur de texte
Un fournisseur de texte permet de fournir le texte localisé pouvant être utilisé dans les formulaires d'objet de contenu Web. Il permet par exemple de localiser les libellés de zone ou le texte d'aide d'un modèle de création afin que les utilisateurs voient ceux-ci dans leur langue.
Pourquoi et quand exécuter cette tâche
Procédure
- Créez une classe java qui implémente l'interface com.ibm.workplace.wcm.api.plugin.textprovider.TextProvider. Cette classe peut implémenter les méthodes suivantes :
public String getProviderName()- Cette méthode renvoie le nom unique du fournisseur de texte.
public String getString(String key, Locale displayLocale)- Cette méthode renvoie un texte traduit en fonction d'une clé identifiant le message et d'un environnement local.
public Collection<String> getProviderKeys()- Cette méthode renvoie une liste de clés utilisées lors de l'accès au fournisseur de texte. Ces clés s'affichent dans l'interface utilisateur de création lorsqu'un utilisateur configure le fournisseur de texte.
public boolean isShownInAuthoringUI()- Cette méthode vous permet de faire en sorte que le fournisseur de texte n'apparaisse pas dans l'interface utilisateur de création.
Consultez la documentation Javadoc pour plus d'informations. The Javadoc files for Web Content Manager are in the
PortalServer_root/doc/Javadoc/spi_docs/com/ibm/workplace/wcmdirectory. - Les méthodes héritées de com.ibm.portal.Localized doivent également être implémentées.
public String getTitle(Locale displayLocale)- Cette méthode renvoie le titre du fournisseur de texte utilisé pour la sélection du fournisseur de texte.
public ListModel<Locale> getLocales()- Cette méthode renvoie une liste des environnements locaux pris en charge par ce fournisseur de texte.
public String getDescription(Locale p_arg0)- Cette méthode renvoie une description du fournisseur de texte.
Par exemple:package test; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.Properties; import java.util.ResourceBundle; import java.util.Set; import com.ibm.portal.ListModel; import com.ibm.portal.ModelException; import com.ibm.workplace.wcm.api.plugin.textprovider.TextProvider; /** * A simple text provider implementation */ public class SimpleTextProvider implements TextProvider { /** Path to Bundle properties file (English used for loading keyset) */ private static final String BUNDLE_PROPERTIES = "/test/SimpleBundle_en.properties"; /** The text provider title */ public static final String PROVIDER_TITLE = "Simple Text Provider"; /** The unique text provider name */ public static final String PROVIDER_NAME = "test.SimpleTextProvider"; /** A brief description of this text provider */ private static final String PROVIDER_DESCRIPTION = "Simple Text provider"; /** The resource bundle used to lookup strings */ private static final String RESOURCE_BUNDLE_NAME = "test.SimpleBundle"; /** * A simple list model holding locales. */ protected static class SimpleLocaleListModel<K> implements ListModel<Locale> { /** the list of locales of this list model */ final List<Locale> m_localeList = new ArrayList<Locale>(); /** * Constructs this simple list model holding the given locales. * * @param p_locales * the locales of this list model. May be <code>null</code>. */ public SimpleLocaleListModel(final Locale[] p_locales) { if (p_locales != null) { for (int i = 0; i < p_locales.length; ++i) { m_localeList.add(p_locales[i]); } } } @Override public Iterator<Locale> iterator() throws ModelException { return m_localeList.iterator(); } } /** a list model that only contains the English language locale */ private static final ListModel<Locale> ENGLISH_ONLY = new SimpleLocaleListModel<Locale>(new Locale[]{Locale.ENGLISH}); @Override public String getProviderName() { return PROVIDER_NAME; } @Override public String getTitle(Locale p_displayLocale) { // Perform any localization for the plug-in title here return PROVIDER_TITLE; } @Override public String getDescription(Locale p_displayLocale) { return PROVIDER_DESCRIPTION; } @Override public String getString(String p_key, Locale p_displayLocale) { String value; try { ResourceBundle bundle = ResourceBundle.getBundle(RESOURCE_BUNDLE_NAME, p_displayLocale); value = bundle.getString(p_key); } catch (MissingResourceException e) { // The bundle or key was not found. Return null. value = null; } return value; } @Override public Collection<String> getProviderKeys() { Collection<String> keys = null; try { LinkedProperties props = new LinkedProperties(); props.load(getClass().getClassLoader().getResourceAsStream(BUNDLE_PROPERTIES)); keys = props.getKeySet(); } catch (IOException e) { // The bundle was not found. Return null. e.printStackTrace(); } return keys; } @Override public ListModel<Locale> getLocales() { return ENGLISH_ONLY; } @Override public boolean isShownInAuthoringUI() { return true; } /** Used to provide the properties in order */ private class LinkedProperties extends Properties { /** Keys */ private final LinkedHashSet<String> keys = new LinkedHashSet<String>(); /** * @return An ordered set of keys */ public Set<String> getKeySet() { return keys; } @Override public Object put(Object key, Object value) { keys.add((String) key); return super.put(key, value); } } }Consultez la documentation Javadoc pour plus d'informations.
- Un fichier plugin.xml est requis, que le déploiement soit effectué via un fichier WAR, EAR ou JAR. Si vous effectuez le déploiement via une application dans un fichier WAR ou EAR, ajoutez le fichier plugin.xml au dossier WEB-INF de l'application. Lorsque vous utilisez un fichier JAR, vous devez inclure le fichier plugin.xml à la racine de ce fichier JAR.
<?xml version="1.0" encoding="UTF-8"?> <plugin id="com.acme" name="Sample Text Provider" version="1.0.0" provider-name="IBM"> <extension point="com.ibm.workplace.wcm.api.TextProvider" id="SampleTextProvider"> <provider class="com.acme.SampleTextprovider"/> </extension> </plugin>Extend the Text ProviderAdapter : Si vous créez un fournisseur de texte qui utilise un regroupement de ressources pour fournir les chaînes traduites, votre classe de fournisseur de texte peut étendrecom.ibm.workplace.wcm.api.plugin.textprovider.TextProviderAdapterau lieu d'implémenterTextProvider. Si vous choisissez de procéder ainsi, les méthodesgetString()etgetProviderKeys()sont implémentées pour vous et vous n'avez pas besoin de les redéfinir.package com.ibm.workplace.wcm.ctc; import java.util.Locale; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.MissingResourceException; import java.util.Properties; import java.util.ResourceBundle; import java.util.Set; import com.ibm.portal.ListModel; import com.ibm.portal.ModelException; import com.ibm.workplace.wcm.api.plugin.textprovider.TextProviderAdapter; /** * A simple text provider implementation that extends TextProviderAdapter. */ public class SimpleTextProvider extends TextProviderAdapter { /** The resource bundle used to lookup strings */ private static final String RESOURCE_BUNDLE_NAME = "test.SimpleBundle"; /** The text provider title */ public static final String PROVIDER_TITLE = "Simple Text Provider"; /** A brief description of this text provider */ private static final String PROVIDER_DESCRIPTION = "Simple Text provider"; /** The unique text provider name */ public static final String PROVIDER_NAME = "test.SimpleTextProvider"; /** * A simple list model holding locales. */ protected static class SimpleLocaleListModel<K> implements ListModel<Locale> { /** the list of locales of this list model */ final List<Locale> m_localeList = new ArrayList<Locale>(); /** * Constructs this simple list model holding the given locales. * * @param p_locales * the locales of this list model. May be <code>null</code>. */ public SimpleLocaleListModel(final Locale[] p_locales) { if (p_locales != null) { for (int i = 0; i < p_locales.length; ++i) { m_localeList.add(p_locales[i]); } } } @Override public Iterator<Locale> iterator() throws ModelException { return m_localeList.iterator(); } } /** a list model that only contains the English language locale */ private static final ListModel<Locale> ENGLISH_ONLY = new SimpleLocaleListModel<Locale>(new Locale[]{Locale.ENGLISH}); @Override public String getProviderName() { return PROVIDER_NAME; } @Override public String getTitle(Locale p_displayLocale) { // Perform any localization for the plug-in title here return PROVIDER_TITLE; } @Override public String getDescription(Locale p_displayLocale) { return PROVIDER_DESCRIPTION; } @Override public boolean isShownInAuthoringUI() { return true; } @Override protected String getResourceBundleName() { return RESOURCE_BUNDLE_NAME; } @Override public ListModel<Locale> getLocales() { return ENGLISH_ONLY; } }
Que faire ensuite
- Chaque plug-in est représenté par une balise
<extension></extension>unique. - La valeur de l'attribut de point doit être
com.ibm.workplace.wcm.api.TextProvider. - Spécifiez l'ID de votre choix.
- Indiquez la classe de fournisseur associée à votre plug-in.
Naming conventions :
Si vous créez une application de plug-in dont le nom et l'ID sont identiques à ceux d'un plug-in existant, le nouveau plug-in peut remplacer le premier. Lorsque vous créez des applications de plug-in, vérifiez que les éléments suivants sont uniques sur votre système :
- L'ID plug-in, le nom de plug-in et l'ID extension du fichier plugin.xml.
- Le nom de classe qualifié complet et le chemin de toutes les classes dans l'application.
- le chemin d'accès aux fichiers de l'application.
Sorting conventions :
Lorsqu'un tri est appliqué à un ensemble d'objets, le titre de l'objet est utilisé pour trier les objets et non le titre spécifié dans le fournisseur de texte.