--- /dev/null
+argeo.osgi.start=\
+org.springframework.osgi.extender,\
+org.argeo.node.repofactory.jackrabbit,\
+org.argeo.node.repo.jackrabbit,\
+org.argeo.security.dao.jackrabbit,\
+org.argeo.security.services,\
+org.argeo.security.equinox,\
+org.argeo.demo.i18n,\
+
+#org.argeo.security.ui.initialPerspective=org.argeo.osgi.ui.explorer.perspective
+org.argeo.security.ui.initialPerspective=org.argeo.demo.i18n.perspective
+
+log4j.configuration=file:../../log4j-demo.properties
+
+eclipse.application=org.argeo.security.ui.rcp.secureUi
--- /dev/null
+argeo.osgi.start=\
+org.springframework.osgi.extender,\
+org.argeo.node.repofactory.jackrabbit,\
+org.argeo.node.repo.jackrabbit,\
+org.argeo.security.dao.ldap,\
+org.argeo.security.services,\
+org.argeo.security.equinox,\
+org.eclipse.core.runtime,\
+org.eclipse.equinox.common,\
+org.eclipse.equinox.http.registry,\
+org.eclipse.equinox.launcher,\
+org.argeo.dep.osgi.catalina.start,\
+org.argeo.jackrabbit.webapp,\
+org.argeo.server.rap.webapp,\
+org.argeo.server.ads.server,\
+org.argeo.demo.i18n,\
+org.springframework.osgi.web.extender,\
+
+
+#Choose initial perspective
+org.argeo.security.ui.initialPerspective=org.argeo.demo.i18n.perspective
+
+log4j.configuration=file:../../log4j-demo.properties
+
+## important to enable internationalization of plugin.xml labels.
+eclipse.registry.MultiLanguage=true
+
+# Note default URL to access the webapp
+# http://localhost:7070/org.argeo.rap.webapp/node
\ No newline at end of file
+++ /dev/null
-argeo.osgi.start=\
-org.springframework.osgi.extender,\
-org.argeo.node.repofactory.jackrabbit,\
-org.argeo.node.repo.jackrabbit,\
-org.argeo.security.dao.ldap,\
-org.argeo.security.services,\
-org.argeo.security.equinox,\
-org.eclipse.core.runtime,\
-org.eclipse.equinox.common,\
-org.eclipse.equinox.http.registry,\
-org.eclipse.equinox.launcher,\
-org.argeo.dep.osgi.catalina.start,\
-org.argeo.jackrabbit.webapp,\
-org.argeo.server.rap.webapp,\
-org.argeo.server.ads.server,\
-org.argeo.demo.i18n,\
-org.springframework.osgi.web.extender,\
-
-
-#Choose initial perspective
-org.argeo.security.ui.initialPerspective=org.argeo.demo.i18n.perspective
-
-log4j.configuration=file:../../log4j.properties
-
-# Note default URL to access the webapp
-# http://localhost:7070/org.argeo.rap.webapp/node
\ No newline at end of file
+++ /dev/null
-log4j.rootLogger=WARN, development
-
-## Levels
-log4j.logger.org.argeo=DEBUG
-
-log4j.logger.org.apache.catalina=INFO
-log4j.logger.org.apache.coyote=INFO
-log4j.logger.org.apache.directory.server=ERROR
-log4j.logger.org.apache.jackrabbit.core.query.lucene=ERROR
-
-## Appenders
-# console is set to be a ConsoleAppender.
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-
-# console uses PatternLayout.
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c - [%t]%n
-
-# development appender (slow!)
-log4j.appender.development=org.apache.log4j.ConsoleAppender
-log4j.appender.development.layout=org.apache.log4j.PatternLayout
-log4j.appender.development.layout.ConversionPattern=%d{HH:mm:ss} [%16.16t] %5p %m (%F:%L) %c%n
\ No newline at end of file
--- /dev/null
+log4j.rootLogger=WARN, development
+
+## Levels
+log4j.logger.org.argeo=DEBUG
+
+log4j.logger.org.apache.catalina=INFO
+log4j.logger.org.apache.coyote=INFO
+log4j.logger.org.apache.directory.server=ERROR
+log4j.logger.org.apache.jackrabbit.core.query.lucene=ERROR
+
+## Appenders
+# console is set to be a ConsoleAppender.
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+
+# console uses PatternLayout.
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c - [%t]%n
+
+# development appender (slow!)
+log4j.appender.development=org.apache.log4j.ConsoleAppender
+log4j.appender.development.layout=org.apache.log4j.PatternLayout
+log4j.appender.development.layout.ConversionPattern=%d{HH:mm:ss} [%16.16t] %5p %m (%F:%L) %c%n
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con"
+ path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5" />
+ <classpathentry kind="con"
+ path="org.eclipse.pde.core.requiredPlugins" />
+ <classpathentry kind="src" path="src/main/java" />
+ <classpathentry kind="output" path="target/classes" />
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.argeo.demo.i18n.rap</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
--- /dev/null
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Fragment-Host: org.argeo.demo.i18n
+Bundle-Version: 0.3.4.SNAPSHOT
+Bundle-SymbolicName: org.argeo.demo.i18n.rap
+Bundle-Vendor: Argeo
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.rap.ui;resolution:=optional,
+ org.eclipse.rap.ui.workbench;resolution:=optional
+Import-Package: org.apache.commons.io,
+ org.apache.commons.logging,
+ org.argeo,
+ org.argeo.eclipse.spring,
+ org.argeo.eclipse.ui,
+ org.argeo.demo.i18n
+Export-Package: org.argeo.demo.i18n.specific;uses:="org.eclipse.rwt"
+
--- /dev/null
+source.. = src/main/java/,\
+output.. = target/classes/
+bin.includes = META-INF/,\
+ .
--- /dev/null
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.commons.demo</groupId>
+ <version>0.3.4-SNAPSHOT</version>
+ <artifactId>plugins</artifactId>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.argeo.demo.i18n.rap</artifactId>
+ <name>Commons Internationalization Demo RAP</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.argeo.commons.demo</groupId>
+ <artifactId>org.argeo.demo.i18n</artifactId>
+ <version>0.3.4-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons.eclipse</groupId>
+ <artifactId>org.argeo.eclipse.ui.rap</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons.eclipse</groupId>
+ <artifactId>org.argeo.eclipse.dep.rap</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ </dependencies>
+</project>
--- /dev/null
+package org.argeo.demo.i18n.specific;
+
+import org.argeo.demo.i18n.NLSHelper;
+import org.eclipse.rwt.RWT;
+
+/**
+ * Implements access to internationalized property using the RAP specific
+ * implementation of NLS. Thanks to {@link http
+ * ://eclipsesource.com/en/info/rcp-rap-single-sourcing-guideline/}
+ */
+public class NLSHelperImpl extends NLSHelper {
+
+ protected Object internalGetMessages(String bundleName,
+ @SuppressWarnings("rawtypes") Class clazz) {
+ return RWT.NLS.getUTF8Encoded(bundleName, clazz);
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con"
+ path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5" />
+ <classpathentry kind="con"
+ path="org.eclipse.pde.core.requiredPlugins" />
+ <classpathentry kind="src" path="src/main/java" />
+ <classpathentry kind="output" path="target/classes" />
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.argeo.demo.i18n.rcp</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
--- /dev/null
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Fragment-Host: org.argeo.demo.i18n
+Bundle-SymbolicName: org.argeo.demo.i18n.rcp
+Bundle-Version: 0.3.4.SNAPSHOT
+Bundle-Vendor: Argeo
+Require-Bundle: org.eclipse.ui;resolution:=optional,
+ org.eclipse.core.runtime;resolution:=optional
+Export-Package: org.argeo.demo.i18n.specific
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Import-Package: org.apache.commons.io,
+ org.apache.commons.logging,
+ org.argeo,
+ org.argeo.demo.i18n,
+ org.argeo.eclipse.spring,
+ org.argeo.eclipse.ui
--- /dev/null
+source.. = src/main/java/,\
+output.. = target/classes/
+bin.includes = META-INF/,\
+ .
\ No newline at end of file
--- /dev/null
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.commons.demo</groupId>
+ <version>0.3.4-SNAPSHOT</version>
+ <artifactId>plugins</artifactId>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.argeo.demo.i18n.rcp</artifactId>
+ <name>Commons Internationalization Demo RCP</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.argeo.commons.demo</groupId>
+ <artifactId>org.argeo.demo.i18n</artifactId>
+ <version>0.3.4-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons.eclipse</groupId>
+ <artifactId>org.argeo.eclipse.ui.rcp</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons.eclipse</groupId>
+ <artifactId>org.argeo.eclipse.dep.rcp</artifactId>
+ <version>${version.argeo-commons}</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
--- /dev/null
+package org.argeo.demo.i18n.specific;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.argeo.demo.i18n.NLSHelper;
+
+public class NLSHelperImpl extends NLSHelper {
+
+ protected Object internalGetMessages(String bundleName, Class clazz) {
+
+ ClassLoader loader = clazz.getClassLoader();
+ // test
+ Locale currentLocale = new Locale("fr");
+ ResourceBundle bundle = ResourceBundle.getBundle(bundleName,
+ currentLocale, loader);
+ // test end
+ // ResourceBundle bundle = ResourceBundle.getBundle(bundleName,
+ // Locale.getDefault(), loader);
+ return internalGet(bundle, clazz);
+ }
+
+ private Object internalGet(ResourceBundle bundle, Class clazz) {
+
+ Object result;
+ try {
+ Constructor constructor = clazz.getDeclaredConstructor(null);
+ constructor.setAccessible(true);
+ result = constructor.newInstance(null);
+ } catch (final Exception ex) {
+ throw new IllegalStateException(ex.getMessage());
+ }
+ final Field[] fieldArray = clazz.getDeclaredFields();
+ for (int i = 0; i < fieldArray.length; i++) {
+ try {
+ int modifiers = fieldArray[i].getModifiers();
+ if (String.class.isAssignableFrom(fieldArray[i].getType())
+ && Modifier.isPublic(modifiers)
+ && !Modifier.isStatic(modifiers)) {
+ try {
+ String value = bundle
+ .getString(fieldArray[i].getName());
+ byte[] bytes = value.getBytes();
+ String forcedValue = new String(bytes, "UTF8");
+ if (value != null) {
+ fieldArray[i].setAccessible(true);
+ fieldArray[i].set(result, forcedValue);
+ }
+ } catch (final MissingResourceException mre) {
+ fieldArray[i].setAccessible(true);
+ fieldArray[i].set(result, "");
+ mre.printStackTrace();
+ }
+ }
+ } catch (final Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ return result;
+ }
+}
--- /dev/null
+#Wed Sep 28 17:41:20 CEST 2011
+eclipse.preferences.version=1
+encoding//src/main/resources/org/argeo/demo/i18n/messages.properties=UTF-8
+encoding//src/main/resources/org/argeo/demo/i18n/messages_fr.properties=UTF-8
Bundle-SymbolicName: org.argeo.demo.i18n;singleton:=true
Bundle-Version: 0.3.4.SNAPSHOT
Bundle-Activator: org.argeo.demo.i18n.I18nDemoPlugin
-Bundle-Localization: org.argeo.demo.i18n.messages
+Bundle-Localization: properties/plugin
Bundle-Vendor: Argeo
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Export-Package: org.argeo.demo.i18n
Require-Bundle: org.eclipse.ui;resolution:=optional,
org.eclipse.core.runtime;resolution:=optional,
org.eclipse.rap.ui;resolution:=optional,
org.eclipse.rap.ui.workbench;resolution:=optional
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Bundle-ActivationPolicy: lazy
Import-Package: org.apache.commons.io,
org.apache.commons.logging,
org.argeo,
org.argeo.eclipse.spring,
org.argeo.eclipse.ui,
+ org.argeo.eclipse.ui.utils,
org.eclipse.ui.forms,
org.eclipse.ui.forms.editor,
org.eclipse.ui.forms.widgets
source.. = src/main/java/,\
src/main/resources
output.. = target/classes/
-bin.includes = META-INF/,\
- .,\
- plugin.xml
+bin.includes = META-INF/,\
+ properties/,\
+ .,\
+ plugin.xml
+++ /dev/null
-
-## commands label
-
-## View labels
-
-## Editor labels
\ No newline at end of file
class="org.argeo.demo.i18n.I18nDemoPerspective"
icon="icons/i18n.gif"
id="org.argeo.demo.i18n.perspective"
- name="Internationalization simple demo">
+ name="%I18nDemoPerspective_name">
</perspective>
</extension>
<!-- Views -->
class="org.argeo.eclipse.spring.SpringExtensionFactory"
icon="icons/browser.gif"
id="org.argeo.demo.i18n.simpleTreeView"
- name="Internationalized tree view">
+ name="%SimpleTreeView_name">
</view>
</extension>
<!-- Editors -->
<editor
class="org.argeo.eclipse.spring.SpringExtensionFactory"
id="org.argeo.demo.i18n.simpleMultitabEditor"
- name="Simple multitab editor"
+ name="%SimpleMultitabEditor_name"
icon="icons/i18n.gif"
default="false">
</editor>
</with>
</definition>
</extension>
-
+ <!-- Preferences -->
+ <extension
+ point="org.eclipse.ui.preferencePages">
+ <page
+ class="org.argeo.demo.i18n.preferences.LocaleSettingsPage"
+ id="org.argeo.demo.i18n.localeSettingsPage"
+ name="%LocaleSettingsPage_Title">
+ </page>
+ </extension>
<!-- Activities -->
<extension
point="org.eclipse.ui.activities">
</with>
</enabledWhen>
</activity>
- <!-- TODO: find a way to exclude evrything -->
+ <!-- TODO: find a way to exclude everything -->
<activityPatternBinding
activityId="org.argeo.jcr.ui.explorer.adminActivity"
isEqualityPattern="true"
<artifactId>org.argeo.eclipse.ui</artifactId>
<version>0.3.4-SNAPSHOT</version>
</dependency>
-
- <!-- RCP only dependency, needed at compile time -->
+
+ <!-- Eclipse - Only used at compile time. so that it is compatible with
+ RCP runtime -->
<dependency>
<groupId>org.argeo.commons.eclipse</groupId>
- <artifactId>org.argeo.eclipse.dep.rcp</artifactId>
- <version>0.3.4-SNAPSHOT</version>
+ <artifactId>org.argeo.eclipse.ui.rap</artifactId>
+ <version>${version.argeo-commons}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.argeo.commons.eclipse</groupId>
- <artifactId>org.argeo.eclipse.ui.rcp</artifactId>
- <version>0.3.4-SNAPSHOT</version>
+ <artifactId>org.argeo.eclipse.dep.rap</artifactId>
+ <version>${version.argeo-commons}</version>
<scope>provided</scope>
</dependency>
+
+ <!-- RCP only dependency, needed at compile time -->
+ <!-- <dependency> <groupId>org.argeo.commons.eclipse</groupId> <artifactId>org.argeo.eclipse.dep.rcp</artifactId>
+ <version>0.3.4-SNAPSHOT</version> <scope>provided</scope> </dependency> <dependency>
+ <groupId>org.argeo.commons.eclipse</groupId> <artifactId>org.argeo.eclipse.ui.rcp</artifactId>
+ <version>0.3.4-SNAPSHOT</version> <scope>provided</scope> </dependency> -->
</dependencies>
</project>
--- /dev/null
+
+## commands label
+
+## View, perspective and editor labels
+I18nDemoPerspective_name=Demo Internationalization
+SimpleTreeView_name=Simple tree view
+SimpleMultitabEditor_name=Simple multi-tab editor
+LocaleSettingsPage_Title=Manage localization settings
\ No newline at end of file
--- /dev/null
+
+## commands label
+
+## View, perspective and editor labels
+I18nDemoPerspective_name=Demo - Internationalisation
+SimpleTreeView_name=Simple vue en arbre
+SimpleMultitabEditor_name=Simple editeur à onglets multiples.
+LocaleSettingsPage_Title=Gérer les informations de localisation
\ No newline at end of file
--- /dev/null
+package org.argeo.demo.i18n;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Centralizes all internationalized labels accross current application.
+ * Supports both RAP and RCP thanks to the NLSHelper. NOTE that the
+ * corresponding NLSHelperImpl must be available.
+ *
+ * thanks to {@link http
+ * ://eclipsesource.com/en/info/rcp-rap-single-sourcing-guideline/}
+ */
+public class I18nDemoMessages extends NLS {
+
+ private static final String BUNDLENAME = I18nDemoPlugin.ID + ".messages"; // $NON-NLS−1$
+
+ public String SimpleMultitabEditor_MultiSectionPageTitle;
+ public String SimpleMultitabEditor_SimplePageTitle;
+ public String MultiSelectionPage_DescriptionSectionTitle;
+ public String MultiSelectionPage_DetailsSectionTitle;
+ public String testLbl;
+
+ // Code that enable handling of concurrent multi sessions locales
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLENAME, I18nDemoMessages.class);
+ }
+
+ private I18nDemoMessages() {
+ }
+
+ public static I18nDemoMessages get() {
+ return (I18nDemoMessages) NLSHelper.getMessages(BUNDLENAME,
+ I18nDemoMessages.class);
+ }
+}
* The constructor
*/
public I18nDemoPlugin() {
+ // Locale currentLocale = new Locale("fr");
+ // Locale.setDefault(currentLocale);
}
/*
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
- messages = ResourceBundle.getBundle("org.argeo.demo.i18n.messages");
+ messages = ResourceBundle.getBundle(ID + ".messages");
+ // messages = ResourceBundle.getBundle(ID + ".messages", currentLocale);
}
/*
--- /dev/null
+package org.argeo.demo.i18n;
+
+import java.text.MessageFormat;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This class enable single sourcing between RAP and RCP. For this to run
+ * correctly, following conventions must be respected:
+ * <ul>
+ * <li>Given the fact that a common interface named Xxx is defined in package
+ * aa.bb.cc, corresponding implementation named XxxImpl must be found in package
+ * aa.bb.cc.specific of both RAP and RCP UI bundles.
+ *
+ * thanks to {@link http
+ * ://eclipsesource.com/en/info/rcp-rap-single-sourcing-guideline/}, chapter 7
+ */
+
+public class ImplementationLoader {
+ private final static Log log = LogFactory
+ .getLog(ImplementationLoader.class);
+
+ public static Object newInstance(
+ @SuppressWarnings("rawtypes") final Class type) {
+ String name = type.getName();
+ // manually construct the implementation name for the given interface,
+ // assuming that convention have been respected.
+ String cName = type.getCanonicalName();
+ String pName = cName.substring(0, cName.lastIndexOf('.') + 1);
+ String sName = cName.substring(cName.lastIndexOf('.') + 1);
+ String implName = pName + "specific." + sName + "Impl";
+ // String implName = cName + "Impl";
+ Object result = null;
+ try {
+ result = type.getClassLoader().loadClass(implName).newInstance();
+ } catch (Throwable throwable) {
+ String txt = "Could not load implementation for {0}";
+ String msg = MessageFormat.format(txt, new Object[] { name });
+ throw new RuntimeException(msg, throwable);
+ }
+ return result;
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.argeo.demo.i18n;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * thanks to {@link http
+ * ://eclipsesource.com/en/info/rcp-rap-single-sourcing-guideline/}
+ */
+public abstract class NLSHelper {
+ private final static NLSHelper IMPL;
+
+ static {
+ IMPL = (NLSHelper) ImplementationLoader.newInstance(NLSHelper.class);
+ }
+
+ public static NLS getMessages(String bundleName,
+ @SuppressWarnings("rawtypes") Class clazz) {
+ return (NLS) IMPL.internalGetMessages(bundleName, clazz);
+ }
+
+ protected abstract Object internalGetMessages(String bundleName,
+ @SuppressWarnings("rawtypes") Class clazz);
+}
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.argeo.demo.i18n.I18nDemoPlugin;
+import org.argeo.demo.i18n.I18nDemoMessages;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
* enable browsing
* */
public class MultiSectionPage extends FormPage {
- private final static Log log = LogFactory
- .getLog(MultiSectionPage.class);
+ private final static Log log = LogFactory.getLog(MultiSectionPage.class);
// this page UI components
private FormToolkit tk;
Composite body = form.getBody();
body.setLayout(twt);
-
- createHistorySection(form.getBody());
- createTreeSection(form.getBody());
+ createHistorySection(form.getBody());
+ createTreeSection(form.getBody());
}
protected void createTreeSection(Composite parent) {
// Section Layout & MetaData
Section section = tk.createSection(parent, Section.TWISTIE);
section.setLayoutData(new GridData(GridData.FILL_BOTH));
- section.setText(I18nDemoPlugin.getMessage("MultiSelectionPage.DescriptionSectionTitle"));
+ section.setText(I18nDemoMessages.get().MultiSelectionPage_DescriptionSectionTitle);
// Section Body
Composite body = tk.createComposite(section, SWT.FILL);
section.setExpanded(true);
}
-
protected void createHistorySection(Composite parent) {
// Section Layout
section.setLayout(twt);
// Set title of the section
- section.setText(I18nDemoPlugin
- .getMessage("MultiSelectionPage.DetailsSectionTitle"));
+ section.setText(I18nDemoMessages.get().MultiSelectionPage_DetailsSectionTitle);
final Text styledText = tk.createText(section, "", SWT.FULL_SELECTION
| SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.argeo.ArgeoException;
+import org.argeo.demo.i18n.I18nDemoMessages;
import org.argeo.demo.i18n.I18nDemoPlugin;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.ui.IEditorInput;
public void init(IEditorSite site, IEditorInput input)
throws PartInitException {
super.init(site, input);
- this.setPartName("Internationalize editor part name");
+ // this.setPartName("Internationalized editor part name");
}
@Override
protected void addPages() {
try {
simplePage = new SimplePage(this,
- I18nDemoPlugin
- .getMessage("SimpleMultitabEditor.SimplePageTitle"));
+ I18nDemoMessages.get().SimpleMultitabEditor_SimplePageTitle);
addPage(simplePage);
multiSectionPage = new MultiSectionPage(
this,
- I18nDemoPlugin
- .getMessage("SimpleMultitabEditor.MultiSectionPageTitle"));
+ I18nDemoMessages.get().SimpleMultitabEditor_MultiSectionPageTitle);
addPage(multiSectionPage);
} catch (PartInitException e) {
--- /dev/null
+package org.argeo.demo.i18n.preferences;
+
+import org.argeo.demo.i18n.I18nDemoPlugin;
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.RadioGroupFieldEditor;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class LocaleSettingsPage extends FieldEditorPreferencePage implements
+ IWorkbenchPreferencePage {
+
+ public LocaleSettingsPage() {
+ super(GRID);
+ }
+
+ public void createFieldEditors() {
+ addField(new BooleanFieldEditor("BOOLEAN_VALUE",
+ "&An example of a boolean preference", getFieldEditorParent()));
+
+ addField(new RadioGroupFieldEditor("CHOICE",
+ "An example of a multiple-choice preference", 1,
+ new String[][] { { "&Choice 1", "choice1" },
+ { "C&hoice 2", "choice2" } }, getFieldEditorParent()));
+ addField(new StringFieldEditor("MySTRING1", "A &text preference:",
+ getFieldEditorParent()));
+ addField(new StringFieldEditor("MySTRING2", "A &text preference:",
+ getFieldEditorParent()));
+ }
+
+ @Override
+ public void init(IWorkbench workbench) {
+ setPreferenceStore(I18nDemoPlugin.getDefault().getPreferenceStore());
+ setDescription("A demonstration of a preference page implementation");
+ }
+}
## English_US labels for Argeo Internationalization demo application
-## Generic labels
+## Generic labels
## Errors & warnings
## Commands
## Editor
-SimpleMultitabEditor.MultiSectionPageTitle=More information
-SimpleMultitabEditor.SimplePageTitle=Base information
+SimpleMultitabEditor_MultiSectionPageTitle=More information
+SimpleMultitabEditor_SimplePageTitle=Base information
+
## Pages
-MultiSelectionPage.DescriptionSectionTitle=Description
-MultiSelectionPage.DetailsSectionTitle=Details
+MultiSelectionPage_DescriptionSectionTitle=Description
+MultiSelectionPage_DetailsSectionTitle=Details
## Dummy ones
--- /dev/null
+## French_FR labels for Argeo Internationalization demo application
+
+## Generic labels
+
+
+## Errors & warnings
+
+## Commands
+
+## Editor
+SimpleMultitabEditor_MultiSectionPageTitle=Plus d'informations
+SimpleMultitabEditor_SimplePageTitle=Informations de base
+## Pages
+MultiSelectionPage_DescriptionSectionTitle=Description
+MultiSelectionPage_DetailsSectionTitle=Détails
+
+
+## Dummy ones
+testLbl=L'internationnalisation des messages semble fonctionner correctement.
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.argeo.commons</groupId>
<packaging>pom</packaging>
<modules>
<module>org.argeo.demo.i18n</module>
+ <module>org.argeo.demo.i18n.rap</module>
+ <module>org.argeo.demo.i18n.rcp</module>
</modules>
<build>
<resources>