Thema dieser Dokumentation / Das FirstSpirit 5 Modul- / Komponenten-Modell / Internationalisierung von Modulen - i18n
Internationalisierung von Modulen - i18n
Generell ist die aktuelle selektierte Sprache des FirstSpirit SiteArchitects oder des ServerManagers über Locale.getDefault() verfügbar.
Eine Beispiel-Implementierung könnte wie folgt aussehen:
Listing: Internationalisierung ModuleResources.java
package de.espirit.firstspirit.opt.vscan.resources;
import de.espirit.common.base.Logging;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.IOException;
import java.io.InputStream;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public final class ModuleResources {
public static final Class LOGGER = ModuleResources.class;
private static volatile ResourceBundle _bundle;
private static final String LOCALE_RESOURCES_PKG =
"de.espirit.firstspirit.opt.vscan.resources.locale.Messages"; // NON-NLS
private static final String ICON_RESOURCES_PKG =
"/de/espirit/firstspirit/opt/vscan/resources/icons"; // NON-NLS
private static final byte[] BYTE = new byte[0];
private ModuleResources() {
}
public static ResourceBundle getResourceBundle() {
Logging.logInfo("Loading locale properties for '" +
Locale.getDefault() + ")", LOGGER); // NON-NLS
if (_bundle != null) {
return _bundle;
}
//noinspection UnusedCatchParameter
try {
_bundle = ResourceBundle.getBundle(LOCALE_RESOURCES_PKG,
Locale.getDefault());
} catch (MissingResourceException e) {
throw new MissingResourceException("Missing Resource bundle: " +
Locale.getDefault() + " ", LOCALE_RESOURCES_PKG, "");
}
return _bundle;
}
public static ResourceBundle getResourceBundle(
final String localeResourceFolder) {
Logging.logInfo("Loading locale properties for '" + Locale.getDefault() +
"'", LOGGER); // NON-NLS
//noinspection UnusedCatchParameter
try {
_bundle = ResourceBundle.getBundle(localeResourceFolder,
Locale.getDefault());
} catch (MissingResourceException e) {
throw new MissingResourceException("Missing Resource bundle: " +
Locale.getDefault() + " ", localeResourceFolder, "");
}
return _bundle;
}
@SuppressWarnings({"UnusedCatchParameter"})
public static String getString(final String key) {
try {
if (_bundle == null) {
getResourceBundle();
}
return _bundle.getString(key);
} catch (MissingResourceException e) {
throw new MissingResourceException("Missing Resource: " +
Locale.getDefault() + " - key: " + key + " - resources: " +
LOCALE_RESOURCES_PKG, LOCALE_RESOURCES_PKG, key);
} catch (NullPointerException e) {
throw new NullPointerException("No bundle set: " +
"use ModuleResources.getResourceBundle().getString(...)");
}
}
private static InputStream getResourceStream(final String iconResourcePkg,
final String filename) {
String iconResourcePkg1 = iconResourcePkg;
if (iconResourcePkg1.startsWith("/")) {
iconResourcePkg1 = iconResourcePkg1.replaceFirst("/", "");
}
final String resname = "/" + iconResourcePkg1.replace('.', '/') +
"/" + filename;
final Class clazz = ModuleResources.class;
return clazz.getResourceAsStream(resname);
}
}
Siehe Datei ModulResources.java, enthalten in der ZIP-Datei mit der Beispiel-Implementierung, FirstSpirit Online-Dokumentation, Kapitel „Dokumentation“ / „Für Entwickler“. |
Ein exemplarisches Anwendungsbeispiel für die Nutzung findet sich in der Konfigurationsoberflächen-Klasse (VScanServiceConfigPanel, siehe Klassen-Beschreibung VScanServiceConfigPanel).
ModuleResources.getString(
"fs-resource.module.vscan.admin.gui.VScanServiceConfigPanel_EngineSetup")
Hierbei werden immer die Ressourcen aus dem Package de.espirit.firstspirit.opt.vscan.resources.locale verwendet. Um andere Ressourcen zu nutzen, muss der Pfad hier über die Methode explizit angegeben werden. Hier steht die Methode
public static ResourceBundle getResourceBundle(
final String localeResourcePath)
zur Verfügung, über die sich ein Package-“Pfad” übergeben lässt. Ein Aufruf würde sich beispielsweise wie folgt darstellen:
ModuleResources
.getResourceBundle(other.resources.locale)
.getString(
"fs-resource.module.vscan.admin.gui.VScanServiceConfigPanel_EngineSetup")