[Schmitzm-commits] r285 - trunk/src/schmitzm/lang
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Mon Aug 3 13:51:54 CEST 2009
Author: alfonx
Date: 2009-08-03 13:51:53 +0200 (Mon, 03 Aug 2009)
New Revision: 285
Modified:
trunk/src/schmitzm/lang/ResourceProvider.java
Log:
* ResourceProvider hat nun zwei neue methoden
public String getString(String key, Locale requestedLocale, final Object... replParams)
und
public String getObject(String key, Locale requestedLocale)
die es erlauben eine String f?\195?\188r eine bestimmt Sprache abzufragen. Wenn requestedLocale == null, gleiches Verhalten wie getObject(String key)
Modified: trunk/src/schmitzm/lang/ResourceProvider.java
===================================================================
--- trunk/src/schmitzm/lang/ResourceProvider.java 2009-08-03 10:49:18 UTC (rev 284)
+++ trunk/src/schmitzm/lang/ResourceProvider.java 2009-08-03 11:51:53 UTC (rev 285)
@@ -203,21 +203,21 @@
if ( !keyPrefix.equals("") )
prefix += ".";
- SortedSet<String> keys = new TreeSet<String>();
+ final SortedSet<String> keys = new TreeSet<String>();
// Alle Keys aus dem Alternativ-Bundle in die Key-Menge aufnehmen, die
// mit dem Preafix beginnen
try {
if ( resourceBundle != null )
- for ( String key : ResourceBundle.getBundle(resourceBundle).keySet() )
+ for ( final String key : ResourceBundle.getBundle(resourceBundle).keySet() )
if ( key.startsWith(prefix) )
keys.add( key.substring(prefix.length()) );
- } catch (MissingResourceException err) {
+ } catch (final MissingResourceException err) {
// Es gibt kein Root-Bundle fuer das Alternativ-Bundle
// --> Keys im Alternativ-Bundle ignorieren
}
// Alle Keys aus dem Standard-Bundle um das Praefix erweitern un
// in die Key-Menge aufnehmen
- for ( String key : ResourceBundle.getBundle(defaultResourceBundle).keySet() )
+ for ( final String key : ResourceBundle.getBundle(defaultResourceBundle).keySet() )
keys.add(key);
return keys;
@@ -267,8 +267,61 @@
* @param key Key unter dem der String gesucht wird
*/
public Object getObject(String key) {
+ return getObject(key, null);
+// String primaryBundle = null;
+// String prefix = "";
+// // Wenn gesetzt, dann das alternative Bundle (mit Key-Prefix)
+// // verwenden. Ansonsten das Standard-Bundle ohne Prefix.
+// if ( resourceBundle != null ) {
+// primaryBundle = resourceBundle;
+// prefix = (keyPrefix != null && !keyPrefix.trim().equals("")) ? keyPrefix+"." : "";
+// } else {
+// primaryBundle = defaultResourceBundle;
+// prefix = "";
+// }
+//
+// try {
+// // Ressource im gesetzten Bundle suchen
+// return ResourceBundle.getBundle(primaryBundle).getObject(prefix+key);
+// } catch (MissingResourceException err) {
+// // Ressource im Standard-Bundle suchen
+// try {
+// return ResourceBundle.getBundle(defaultResourceBundle).getObject(key);
+// } catch (MissingResourceException err2) {
+// // Wenn Ressource auch im Standard-Bundle nicht vorhanden ist,
+// // Fehler werfen (oder ignorieren
+// if ( ignoreMissingResource ) {
+// LOGGER.warn("ResourceBundle "+primaryBundle+": "+err.getMessage());
+// return null;
+// }
+// throw err2;
+// }
+// }
+ }
+
+
+ /**
+ * Liefert ein Objekt aus dem Resource-Bundle. Wenn gesetzt, wird zunaechst im
+ * alternativen Bundle (ggf. mit Prefix) gesucht. Wenn die Ressource dort
+ * nicht gefunden wird, wird auf das Standard-Bundle zurueckgegriffen.
+ * Wenn die Suche (auch) dort nicht erfolgreich ist, wird je nach Einstellung
+ * eine {@link MissingResourceException} geworfen oder {@code null} zurueck
+ * gegeben.
+ * @param requestedLocale Wenn <code>null</code>, dann wird die im System verwendete
+ * default {@link Locale} benutzt. Sonst wir versucht der String für
+ * diese Sprache zurückzugeben.
+ * @param key Key unter dem der String gesucht wird
+ */
+ public Object getObject(final String key, Locale requestedLocale) {
String primaryBundle = null;
String prefix = "";
+
+ if (requestedLocale == null) {
+ requestedLocale = Locale.getDefault();
+ }
+ LOGGER.debug("Requested locale = "+requestedLocale.getLanguage());
+
+
// Wenn gesetzt, dann das alternative Bundle (mit Key-Prefix)
// verwenden. Ansonsten das Standard-Bundle ohne Prefix.
if ( resourceBundle != null ) {
@@ -281,12 +334,14 @@
try {
// Ressource im gesetzten Bundle suchen
- return ResourceBundle.getBundle(primaryBundle).getObject(prefix+key);
- } catch (MissingResourceException err) {
+ final ResourceBundle pBundle = ResourceBundle.getBundle(primaryBundle, requestedLocale);
+// LOGGER.debug("ANd the result is ="+pBundle.getLocale());
+ return pBundle.getObject(prefix+key);
+ } catch (final MissingResourceException err) {
// Ressource im Standard-Bundle suchen
try {
- return ResourceBundle.getBundle(defaultResourceBundle).getObject(key);
- } catch (MissingResourceException err2) {
+ return ResourceBundle.getBundle(defaultResourceBundle, requestedLocale).getObject(key);
+ } catch (final MissingResourceException err2) {
// Wenn Ressource auch im Standard-Bundle nicht vorhanden ist,
// Fehler werfen (oder ignorieren
if ( ignoreMissingResource ) {
@@ -297,6 +352,7 @@
}
}
}
+
/**
* Liefert einen String aus dem Resource-Bundle. Wenn gesetzt, wird zunaechst im
@@ -312,7 +368,33 @@
* Fehlermeldungen)
*/
public String getString(String key, Object... replParams) {
- Object object = getObject(key);
+// Object object = getObject(key);
+// String string = object != null ? object.toString() : missingResourceString;
+// for (int i=0; i<replParams.length; i++)
+// string = string.replaceAll("\\$\\{"+i+"\\}", replParams[i] != null ? replParams[i].toString() : "null");
+// return string;
+ return getString(key, (Locale)null, replParams);
+ }
+
+
+ /**
+ * Liefert einen String aus dem Resource-Bundle. Wenn gesetzt, wird zunaechst im
+ * alternativen Bundle (ggf. mit Prefix) gesucht. Wenn die Ressource dort
+ * nicht gefunden wird, wird auf das Standard-Bundle zurueckgegriffen.
+ * Wenn die Suche (auch) dort nicht erfolgreich ist, wird je nach Einstellung
+ * eine {@link MissingResourceException} geworfen oder der Alternativ-String
+ * zurueck gegeben.
+ * @param key Key unter dem der String gesucht wird
+ * @param requestedLocale Wenn <code>null</code>, dann wird die im System verwendete
+ * default {@link Locale} benutzt. Sonst wir versucht der String für
+ * diese Sprache zurückzugeben.
+ * @param replParams Strings/Zahlen, mit denen die im String enthaltenen
+ * Wildcards <code>${0}</code>, <code>${1}</code>, <code>${2}</code>, usw.
+ * ersetzt werden (sehr hilfreich z.B. fuer lokalisierte
+ * Fehlermeldungen)
+ */
+ public String getString(final String key, final Locale requestedLocale, final Object... replParams) {
+ final Object object = getObject(key, requestedLocale);
String string = object != null ? object.toString() : missingResourceString;
for (int i=0; i<replParams.length; i++)
string = string.replaceAll("\\$\\{"+i+"\\}", replParams[i] != null ? replParams[i].toString() : "null");
More information about the Schmitzm-commits
mailing list