ResourceBundle findet Resource nicht

Status
Nicht offen für weitere Antworten.
S

Spontex

Gast
Hallo,

um meinem Progrämmchen Multi-Language-Support zu verpassen habe ich eine Klasse von ResourceBundle abgeleitet um davon dann verschiedene Sprachen, wie MyResource_de und MyResource_en zu erstellen. Nur habe ich jetzt das Problem, das wenn ich auf ein Bundle zugreifen möchte er dieses nicht findet:

java.util.MissingResourceException: Can't find bundle for base name CLanguage, locale de

CMainFrame.java
Code:
import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.BorderLayout;
import java.util.Locale;
import java.util.ResourceBundle;

import resource.lang.*;

public class CMainForm extends JFrame {
  
	private JPanel m_Panel;
	private ResourceBundle m_Language;
	private Locale m_Locale;
	
	public CMainForm() {
		super("Resource Language test");
		
		m_Locale = Locale.GERMAN;
		m_Language = ResourceBundle.getBundle("CLanguage", m_Locale);
		
		m_Panel = new JPanel(new BorderLayout());
		
	    setContentPane(m_Panel);
	}
	
	public static void main( String[] args ) {
		CMainForm frame = new CMainForm();
		
		frame.setLocation(150,100);
		frame.setSize(500, 300);
		frame.setVisible(true);
		
	}
}

Ok, die Spracheresourcen liegen in einem anderem package aber daran liegt es nicht habe sie mal herüberkopiert. An den endungen der Resourcen "de" "DE" oder "de_DE" scheint es auch nicht zu liegen da ich sie schon durchprobiert habe.

CLangAdapter.java
Code:
package resource.lang;

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.ResourceBundle;

public class CLangAdapter extends ResourceBundle {
  
    protected Hashtable data = new Hashtable();
    
    public Enumeration getKeys() {
        return data.keys();
    }

    protected Object handleGetObject(String key) {
        return data.get(key);
    }

    public ResourceBundle getParent() {
        return parent;
    }
}

CLanguage.java
Code:
package resource.lang;

public class CLanguage extends CLangAdapter {

    public CLanguage() {
        /* Cross language used items */
        this.data.put("ok", "OK");
    }        
}

CLanguage_de.java
Code:
package resource.lang;

public class CLanguage_de extends CLangAdapter {

    public CLanguage_de() {
        /* Generally used items */
        this.data.put("abort", "Abbrechen");
        this.data.put("print", "Drucken");
        this.data.put("help", "Hilfe");
        this.data.put("mainmenu", "Hauptmenü");
        this.data.put("overview", "Übersicht");
        this.data.put("back", "Zurück");
        this.data.put("exit", "Beenden");
        this.data.put("exitprog", "Programm beenden");
        
        /* Mainmenu & toolbar items */
        this.data.put("file", "Datei");
        this.data.put("report", "Bericht");
        this.data.put("maintain", "Pflege");
        this.data.put("exectute", "Ausführen");
        this.data.put("window", "Fenster");
        this.data.put("printer", "Drucker einrichten");
        this.data.put("connection", "Verbindung einrichten");
        this.data.put("user", "Benutzerdefiniert...");
        
    }      
}

CLanguage_en.java
Code:
package resource.lang;

public class CLanguage_en extends CLangAdapter {
    
    public CLanguage_en() {
        /* Generally used items */
        this.data.put("abort", "Abort");
        this.data.put("print", "Print");
        this.data.put("help", "Help");
        this.data.put("mainmenu", "Mainmenu");
        this.data.put("overview", "Overview");
        this.data.put("back", "Back");
        this.data.put("exit", "Exit");
        this.data.put("exitprog", "Exit programm");
        
        /* Mainmenu & toolbar items */
        this.data.put("file", "File");
        this.data.put("report", "Report");
        this.data.put("maintain", "Maintain");
        this.data.put("exectute", "Execute");
        this.data.put("window", "Window");
        this.data.put("printer", "Printer setup");
        this.data.put("connection", "Connection setup");
        this.data.put("user", "User-defined...");
        
    }
}

Ich danke für eure Hilfe!
 
S

Spontex

Gast
foobar hat gesagt.:
Warum speicherst du die Strings denn wieder in einer Klasse? Resourcebundles sind dazu da um Strings in separaten Propertiefiles zu speichern, damit man diese zentral ändern kann. So wie du das machst hast du nichts gewonnen.
http://www.galileocomputing.de/openbook/javainsel/java-10.htm#Xxx610502

Wieso habe ich dadurch nichts gewonnen? Ich brauche sie nicht in einer Datei zu speichern da ich die Sprache später nicht mehr ändern muss/möchte. Und gewonnen habe ich dadurch das ich so nur die Locale variable ändern muss
Code:
m_Locale = Locale.ENGLISH;
und automatisch von meinem Resourcenbundle dann alles in Englischer Sprache zurückgeliefert bekomme.

www.javabuch.de 17.4 Internationalisierung und Lokalisierung bzw. -> 17.4.4 Laden von Ressourcen
oder im Javadoc: http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html

Grüsse
Spontex
 
S

Spontex

Gast
Hallo zusammen,

die Lösung war mal wieder einfach, sobald man packages verwendet muss man diese auch bei der Methode .getBundle() im Klassennamen mit angeben, auch wenn die Language Klasse alle im selben package liegen.

Ich habe aber noch eine Frage zum Singelton:
Die Klasse CLangResource haben ich als Singelton implementiert um darüber die Sprachen einfach wechseln und überall Zugriff auf die Resourcen zu haben. Nur stellt sich mir die Frage, wenn schon eine Instanz von CLangResource in m_Language liegt und ich jetzt wiederum über die Methode .getInstance(Locale lang) eine neue Instanz erstelle wird dann die vorhandene Instanz überschrieben oder bleibt sie irgendwo bestehen??

Was hat meine Lösung jetzt eigentlich noch für Vor- und/oder Nachteile, die sich mir anscheinend verschliessen, im Gegensatz zur Lösung mit Dateien? Außer das man die Dateien die Sprache im nachinein abändern könnte?

Verwendung:
Code:
CLangResource m_Language = CLangResource.getInstance(Locale.GERMAN); /*oder Locale.US*/

Code:
import java.util.Enumeration;
import java.util.Locale;
import java.util.ResourceBundle;

public class CLangResource {
    
    private static ResourceBundle m_Resource;
    private static CLangResource m_Language;
    
    private CLangResource(Locale lang) {
        m_Resource = ResourceBundle.getBundle("package.CLanguage", lang);
    }
    
    public static CLangResource getInstance() {
        return m_Language;
    }
    
    public static CLangResource getInstance(Locale lang) {
        m_Language = new CLangResource(lang);
        return m_Language;
    }
    
    
    public String getString(String key) {
       return m_Resource.getString(key); 
    }
    
    public Enumeration getKeys() {
        return m_Resource.getKeys();
    }
    
    public Locale getLocale() {
        return m_Resource.getLocale();
    }
}

ClangAdapter.java
Code:
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.ResourceBundle;

public class CLangAdapter extends ResourceBundle {
  
    protected Hashtable data = new Hashtable();
       
    public Enumeration getKeys() {
        return data.keys();
    }

    public Object handleGetObject(String key) {
        return data.get(key);
    }

    public ResourceBundle getParent() {
        return parent;
    }
}

CLanguage.java
Code:
public class CLanguage extends CLangAdapter {

    public CLanguage() {
        /* Craoss language used items */
        this.data.put("ok", "OK");
    }        
}

CLanguage_de.java
Code:
public class CLanguage_de extends CLangAdapter {

    public CLanguage_de() {
        /* Generally used items */
        this.data.put("abort", "Abbrechen");
        this.data.put("print", "Drucken");
        this.data.put("help", "Hilfe");
        this.data.put("mainmenu", "Hauptmenü");
        this.data.put("overview", "Übersicht");
        this.data.put("back", "Zurück");
        this.data.put("exit", "Beenden");
        this.data.put("exitprog", "Programm beenden");
        
        /* Mainmenu & toolbar items */
        this.data.put("file", "Datei");
        this.data.put("report", "Bericht");
        this.data.put("maintain", "Pflege");
        this.data.put("exectute", "Ausführen");
        this.data.put("window", "Fenster");
        this.data.put("printer", "Drucker einrichten");
        this.data.put("connection", "Verbindung einrichten");
        this.data.put("user", "Benutzerdefiniert...");
    }        
}

CLanguage_en.java
Code:
public class CLanguage_en extends CLangAdapter {
    
    public CLanguage_en() {
        /* Generally used items */
        this.data.put("abort", "Abort");
        this.data.put("print", "Print");
        this.data.put("help", "Help");
        this.data.put("mainmenu", "Mainmenu");
        this.data.put("overview", "Overview");
        this.data.put("back", "Back");
        this.data.put("exit", "Exit");
        this.data.put("exitprog", "Exit programm");
        
        /* Mainmenu & toolbar items */
        this.data.put("file", "File");
        this.data.put("report", "Report");
        this.data.put("maintain", "Maintain");
        this.data.put("exectute", "Execute");
        this.data.put("window", "Window");
        this.data.put("printer", "Printer setup");
        this.data.put("connection", "Connection setup");
        this.data.put("user", "User-defined..."); 
    }
}

Grüsse
Spontex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S URLClassLoader findet ResourceBundle nicht Allgemeine Java-Themen 0
Ernesto95 Best Practice Localization über ResourceBundle Allgemeine Java-Themen 6
L OOP Wohin mit dem ResourceBundle für Mehrsprachigkeit? Allgemeine Java-Themen 1
H ResourceBundle während Laufzeit bearbeiten Allgemeine Java-Themen 3
E ResourceBundle.getBundle() Problem Allgemeine Java-Themen 6
A Classpath ResourceBundle Problem bzgl. Pfade bzw. Pfade (auch in Eclipse) generell? Allgemeine Java-Themen 7
firefexx ResourceBundle laden Allgemeine Java-Themen 2
U Mehrsprachigkeit mit ResourceBundle Allgemeine Java-Themen 9
R ResourceBundle in Servlets verwenden Allgemeine Java-Themen 13
S ResourceBundle: Locale Datei in Jar finden Allgemeine Java-Themen 3
C Reload ResourceBundle Allgemeine Java-Themen 6
S Resourcebundle - mehrzeiligen Text erlauben Allgemeine Java-Themen 3
R ResourceBundle-Verständnisproblem Allgemeine Java-Themen 3
P Mehrsprachig programmieren ResourceBundle Allgemeine Java-Themen 6
A ResourceBundle ohne LOCALE funkt nicht. Allgemeine Java-Themen 4
G Tomcat ResourceBundle Allgemeine Java-Themen 7
L Alle Keys eines ResourceBundle Allgemeine Java-Themen 3
T ResourceBundle aus .jar auslesen > MissingResourceExcepti Allgemeine Java-Themen 4
J ResourceBundle / properties-datei während der Laufzeit verän Allgemeine Java-Themen 6
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
T JSoup findet input Feld nicht?! Wie kann ich das Feld finden? Allgemeine Java-Themen 3
M Matcher-Klasse findet match nicht Allgemeine Java-Themen 6
G Eclipse Java findet MySQL Driver nach export nicht mehr Allgemeine Java-Themen 2
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
R Seleium / WebDriver findet weder URL noch Title Allgemeine Java-Themen 1
B Classpath Eclipse findet importierte Klassen nicht Allgemeine Java-Themen 1
A Classpath programm findet jdbc nicht Allgemeine Java-Themen 4
E ProcessBuilder findet Datei nicht Allgemeine Java-Themen 3
S Programm findet eingebundene .jar Datei nicht Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
J javax.comm findet serielle ports nicht Allgemeine Java-Themen 2
G jar Datei findet Main Class nicht... Allgemeine Java-Themen 2
X Java findet eine Enum Klasse nicht Allgemeine Java-Themen 2
Q .jar findet ImageIcon nicht Allgemeine Java-Themen 16
J Entweder XP oder Vista findet die Datei nicht FileNotFoundException Allgemeine Java-Themen 4
G Compilier-Problem findet Klasse nicht ! Allgemeine Java-Themen 11
M Ausführbares JAR erstellen - Findet Klassen nicht Allgemeine Java-Themen 4
M Import findet das Projekt nicht. Allgemeine Java-Themen 5
K HTML-Formular findet Servlet nicht Allgemeine Java-Themen 2
S jni, javah, eclipse - wer findet den fehler? Allgemeine Java-Themen 5
K Scanner.hasNext findet kein Ende Allgemeine Java-Themen 6
W Compiler findet Pakete nicht. Allgemeine Java-Themen 2
A Swing hat ein leicht verändertes Aussehen, wie findet ihrs? Allgemeine Java-Themen 28
Y Comm-API findet keine Ports Allgemeine Java-Themen 5
S class path resource [config.properties}] cannot be opened because it does not exist Allgemeine Java-Themen 4
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
L Classpath Relativer Pfad einer Resource? Allgemeine Java-Themen 9
Tacofan Bilder in Resource speichern Allgemeine Java-Themen 6
D Classpath Frage zum Java Resource Loading Allgemeine Java-Themen 2
J Java Resource nicht verfügbar in JAR Allgemeine Java-Themen 4
D [debuggen] nich geschlossene Resource "finden" Allgemeine Java-Themen 5
BattleMaster246 Resource Pfadangaben Allgemeine Java-Themen 4
M Zugriff auf Resource (Textfile) in einem Jar? Allgemeine Java-Themen 2
reibi java.lang.Class - Resource - Solaris Allgemeine Java-Themen 17
T Resource laden Allgemeine Java-Themen 3
D Problem mit Resource Bundles Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben