Model und i18n bzw. Properties

Status
Nicht offen für weitere Antworten.

Elephant

Aktives Mitglied
Hallo,

ich würde gerne wissen, wie man eine ganze Anwendung so aufbauen kann, dass leicht die Sprache geändert werden kann oder Meldungen etc. angepasst werden können.

Das Problem ist, bei z.B. einer Oberfläche ist das noch relativ einfach, man hat einfach eine Properties-Datei die man irgendwo ausliest und dann 'mitgibt' als Referenz z.B.

Aber wie macht man das bei 'Model-Klassen' etc. Also einfachen Objekten, die nur Daten halten, oder z.B. Exceptions. Wie kann man z.B. für Exceptions-Klassen (die man selbst implementiert hat) Fehlermeldungen in einer Propertie-Datei speichern oder ResourceBundle verwenden? Bei jeder Exception eine Properties-Datei einzulesen kommt mir irgendwie nicht so geeignet vor, außerdem hätte man dann ja auch bei einer großen Anwendung eine Menge Properties-Dateien (z.B. für jede Exceptions-Art), die jeweils nur wenige 'Zeilen' haben.

Mir fällt irgendwie nichts richtiges dazu ein.
 
R

Roar

Gast
o_O was willst du bei exceptions lokalisieren?
throw new MeineBlödeException(bundle.getString("exceptions.fehler1")); ?
das ist sache der gui, eine entsprechende fehlermeldung dem user auszugeben. und wenn es wirklich nicht anders geht kannst du ja die methode getLocalizedMessage() überschreiben und dort die nachricht zurückgeben.
 

Elephant

Aktives Mitglied
Achso, ich dachte die Fehlermeldungen gehören irgendwie in die Exceptions oder ins 'Model' wo die Fehler enstehen, da ja bei 'normalen' Exceptions (NullPointerException, SAXExceptions) ja auch immer eine Nachricht mit Hilfe von getMessage() ausgegeben werden kann, und diese ja vorher übergeben wurde.

Die Frage bezieht sich auch nicht nur auf Fehlermeldungen sondern allgemein auf alles, was man einfach abändern möchte. (und das hat ja nicht immer was mit der GUI zu tun) Also z.B. (ein dummes Beispiel, aber egal) wenn ich eine Datei nach einem Pattern durchsuchen möchte (das Pattern hat aber nichts mit dem Benutzer zu tun, das wird einfach von der Anwendung intern verwendet). Jetzt fällt mir ein, dass ich das Pattern gern etwas anders haben möchte, dann wär es gut, wenn ich es in einer Properties-Datei schnell ändern könnte (habe ich mir jedenfalls so gedacht) oder gibt man sowas doch direkt in der Klasse an? Oder wenn z.B. eine xsd-Datei verwendet wird (beim Parsen einer xml), wäre es (glaub ich) einfacher, wenn der Pfad in einer Properties-Datei stände und nicht direkt in der Klasse. Nur dann müsste ich (wie schon gesagt) für jede Klasse, in der so etwas vorkommen kann, eine eigene Properties-Datei erstellen, dass kommt mir nicht geeignet vor.
 
R

Roar

Gast
Elephant hat gesagt.:
Achso, ich dachte die Fehlermeldungen gehören irgendwie in die Exceptions oder ins 'Model' wo die Fehler enstehen, da ja bei 'normalen' Exceptions (NullPointerException, SAXExceptions) ja auch immer eine Nachricht mit Hilfe von getMessage() ausgegeben werden kann, und diese ja vorher übergeben wurde.
ja äh tun sie ja auch :bahnhof:

Die Frage bezieht sich auch nicht nur auf Fehlermeldungen sondern allgemein auf alles, was man einfach abändern möchte. (und das hat ja nicht immer was mit der GUI zu tun) Also z.B. (ein dummes Beispiel, aber egal) wenn ich eine Datei nach einem Pattern durchsuchen möchte (das Pattern hat aber nichts mit dem Benutzer zu tun, das wird einfach von der Anwendung intern verwendet). Jetzt fällt mir ein, dass ich das Pattern gern etwas anders haben möchte, dann wär es gut, wenn ich es in einer Properties-Datei schnell ändern könnte (habe ich mir jedenfalls so gedacht) oder gibt man sowas doch direkt in der Klasse an? Oder wenn z.B. eine xsd-Datei verwendet wird (beim Parsen einer xml), wäre es (glaub ich) einfacher, wenn der Pfad in einer Properties-Datei stände und nicht direkt in der Klasse. Nur dann müsste ich (wie schon gesagt) für jede Klasse, in der so etwas vorkommen kann, eine eigene Properties-Datei erstellen, dass kommt mir nicht geeignet vor.
ja, wenn du willst kannst du alle variablen in externe dateien auslagern :shock: über den sinn dabei ließe sich streiten :roll:
bei deinen beispielen halte ich das jedenfalls für weniger sinnvoll, da ich mal davon ausgehe dass die werte *spät* nachträglich eh nicht geändert werden, und wenn doch dann kann man es genausogut im source code machen.
 

Elephant

Aktives Mitglied
Hallo nochmal,

mit den Beispielen hast Du wahrscheinlich recht, wenn sich etwas normalerweise nicht ändert, kann man es auch in die Klasse schreiben.
Zu den Exceptions habe ich bei Sun ein Beispiel gefunden:

Code:
public class OverLimitException extends Exception {

   private double detail;

   public OverLimitException (double amount) {
       detail = amount;
   }

   public String getMessage() {
      return getLocalizedMessage(Locale.getDefault());
   }

   public String getLocalizedMessage(Locale currentLocale) {
      ResourceBundle messages =
         ResourceBundle.getBundle("ExceptionBundle",currentLocale);
      Object[] messageArguments = {new Float(detail)};
      MessageFormat formatter = new MessageFormat("");
      formatter.setLocale(currentLocale);
      formatter.applyPattern(messages.getString("pattern"));
      return formatter.format(messageArguments);
   }
}

Meine Frage ist nun, ob das nicht alles sehr verlangsamt, wenn ich das für viele Exceptions mache, und immer erst das ResourceBundle 'geladen' werden muss (also ResourceBundle.getBundle("ExceptionBundle",currentLocale)) und ob es überhaupt sinnvoll ist. Für jede Exception eine Properties-Datei anzulegen find ich nicht so gut, aber eine zu laden, die für verschiedene Exceptions verwendbar ist, ist auch unsinnig und wie man so eine Datei irgendwo zentral hält, fällt mir auch nicht ein.
 

Elephant

Aktives Mitglied
Noch eine Frage dazu, ist es sinnvoll in so einem Fall eine statische Klasse/Methode zu verwenden, auf die z.B. in der Exceptions-Klasse zugegriffen werden kann um z.B. eine lokalisierte Fehlermeldung 'abzufragen' ohne dass man der Exceptions-Klasse erst über Referenzen ein Settings-Objekt o.ä. mitgeben muss?
 

Illuvatar

Top Contributor
Also Exception heißt Ausnahme und sollte in einem bugfreien Programm auch nicht vorkommen... klar ist kein Programm bugfrei, aber bei den 1-2 Ausnahmen, die da vllt mal auftreten, wäre mir das egal ob er 5 Millisekunden mehr brauchr weil er noch die Nachricht lädt.
Bei dir hört sich das so an, als würdest du deinen Programmfluss mit Exceptions steuern, da solltest du dann eh nochmal drüber nachdenken.
 

Elephant

Aktives Mitglied
Auch wenn das nicht ganz zum Thema gehört, hab ich eine Frage dazu.

Ich weiß immer nicht, was besser ist, ob man die Klassen so machen soll, dass diese selber dafür sorgen, dass keine Fehler entstehen oder ob man dass dem 'Programmierer' überlässt, der die Klasse verwendet.

Also ich versuche mal ein Beispiel:

Ein Objekt hält eine Liste von anderen Objekten, die jeweils eine eindeutige Id haben müssen. Jetzt will jemand dem Objekt ein neues Objekt übergeben und die Id des Objekts ist schon vorhanden, das Objekt darf also nicht in die Liste. Das heißt eine Exception wird geworfen (denk ich mir mal), die Frage ist, ob der, der das Objekt übergibt, selbst dafür sorgen sollte, dass er kein Objekt übergibt, dessen Id schon vergeben ist oder ob er erst was 'unternehmen' soll, wenn die Exception geworfen wurde. Das zweitere wäre ja, glaub ich, dass dann mit der Exception das Programm gesteuert wird, das sollte also nicht sein?
 

Illuvatar

Top Contributor
Hmm kommt drauf an, würde ich sagen.
Also die Liste sollte auf jeden Fall die Exception werfen, das stimmt. Die Frage ist jetzt, woher die Klasse, die die Liste füllt, die Werte kriegt. Wenn sie die Werte selbst generiert, sollte das ja auf keinen Fall passieren - bzw es wäre ein Bug und somit gerechtfertigt, dass die Exception fliegt und evtl das Programm beendet wird.
Wenn die Werte vom User eingegeben werden - ich weiß es auch nicht so gut, aber meiner Ansicht nach sollte es dann für guten Stil eher vor dem Einfügen eine if-Abfrage machen, anstatt eben im catch Block zu reagieren.
 

Lim_Dul

Top Contributor
Elephant hat gesagt.:
Auch wenn das nicht ganz zum Thema gehört, hab ich eine Frage dazu.

Ich weiß immer nicht, was besser ist, ob man die Klassen so machen soll, dass diese selber dafür sorgen, dass keine Fehler entstehen oder ob man dass dem 'Programmierer' überlässt, der die Klasse verwendet.

Also ich versuche mal ein Beispiel:

Ein Objekt hält eine Liste von anderen Objekten, die jeweils eine eindeutige Id haben müssen. Jetzt will jemand dem Objekt ein neues Objekt übergeben und die Id des Objekts ist schon vorhanden, das Objekt darf also nicht in die Liste. Das heißt eine Exception wird geworfen (denk ich mir mal), die Frage ist, ob der, der das Objekt übergibt, selbst dafür sorgen sollte, dass er kein Objekt übergibt, dessen Id schon vergeben ist oder ob er erst was 'unternehmen' soll, wenn die Exception geworfen wurde. Das zweitere wäre ja, glaub ich, dass dann mit der Exception das Programm gesteuert wird, das sollte also nicht sein?

Wenn falsche oder nicht vernünftig behandelbare Parameter an eine Methode übergeben werden, macht es durchaus Sinn eine Exception zu werfen. Dennoch sollte die Funktion normalerweise so dokumentiert sein, dass dem Programmier klar ist, wie er sie zu benutzen hat und dass er keine doppelten Elemente versucht einzufügen. Dementsprechend würde es in dem Fall Sinn machen eine Exception zu werfen, die von RuntimeException abgeleitet ist.

Letztendlich wird das fast überall so gemacht. Sämtliche Klassen des Collection Frameworks (Wie ArrayList, Vector etc.) werden eine IndexOutOfBoundException, wenn man versucht mittels get() auf Elemente zuzugeifen, die nicht drin sind.

Die grundlegende Entscheidung ist dabei jedoch, was sind falsche Parameter? Dafür ist es wichtig genau zu spezifieren, was die Methode macht und was für Paramter sie erwartet.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
G Model View Controller Java Basics - Anfänger-Themen 7
S Model View Controller: Verständnisproblem Java Basics - Anfänger-Themen 13
G Model mit Models füllen Java Basics - Anfänger-Themen 9
W Befüllung einer Tabelle mit Checkbox, Trennung GUI und Model Java Basics - Anfänger-Themen 5
Q MVC Verständnisproblem: Controller vs model.modelChanged() Java Basics - Anfänger-Themen 0
I Klassen Java Qt Model/View Datenhaltung Java Basics - Anfänger-Themen 4
M Problem mit JTable und Model Java Basics - Anfänger-Themen 3
C Bounded Range Model Java Basics - Anfänger-Themen 1
M Input/Output Vom Model zur Database? Java Basics - Anfänger-Themen 7
propra Wie mache ich einem JPanel mein bereits instanziertes Model bekannt Java Basics - Anfänger-Themen 9
F MVC: Model Klasse erstellen Java Basics - Anfänger-Themen 3
N local variable model is accessed from within inner class; needs to be declared final Java Basics - Anfänger-Themen 4
C OOP Model View Controller - Prinzip Java Basics - Anfänger-Themen 6
L Eigenes List Model für Icon + String -> Speicherhungrig? Java Basics - Anfänger-Themen 8
S Forumlare nach dem MVC-Model Java Basics - Anfänger-Themen 5
hdi Fehler beim Model-Update einer JList (DefaultListModel) Java Basics - Anfänger-Themen 3
hdi JList mit Model und Observer -> Chaos, blicke nicht durch Java Basics - Anfänger-Themen 22
K Model-View-Controller Java Basics - Anfänger-Themen 15
K Frage zum Model View Controller Prinzip Java Basics - Anfänger-Themen 6
K Problem mit Abstract Table Model Java Basics - Anfänger-Themen 5
G Einbindung von MVC (Model-View-Controll) Java Basics - Anfänger-Themen 8
megachucky Model View Controller Pattern - Suche Hilfe bei Anwendung Java Basics - Anfänger-Themen 4
C JTable Model - getValueAt (int) Java Basics - Anfänger-Themen 3
G JTable mit eigenen Model neu zeichnen Java Basics - Anfänger-Themen 4
L Model einer Table bekommen Java Basics - Anfänger-Themen 6
P Tabelle mit Model -> getSelectedRow Java Basics - Anfänger-Themen 4
S Model-View-Controller Konzept Beispiel Java Basics - Anfänger-Themen 11
M model übergeben? Java Basics - Anfänger-Themen 16
steffomio Suche brauchbares I18N Lib Java Basics - Anfänger-Themen 4
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
C Pfad zu Properties-File bei ResourceBundle Java Basics - Anfänger-Themen 7
amazinglife77 Input/Output Lesen/Schreiben Properties: in eclipse geht, als JAR nicht Java Basics - Anfänger-Themen 4
E Gibt es in Java Properties (wie in C#) Java Basics - Anfänger-Themen 6
D Von einem Objekt auf Properties zugreifen Java Basics - Anfänger-Themen 3
U Properties außerhalb des war-Files Java Basics - Anfänger-Themen 1
U Richtig *.properties speichern Java Basics - Anfänger-Themen 0
Z Erste Schritte Versuche ein Labyrinth in einem Terminal zu erstellen, aber kann die properties Datei nicht einlesen Java Basics - Anfänger-Themen 3
I Properties oder Umgebungsvariablen mit ${irgendwas} lesen? Java Basics - Anfänger-Themen 2
I beim auslesen der Properties gibt es ein Fehler Java Basics - Anfänger-Themen 7
kaoZ Best Practice Properties oder Preferences ? Java Basics - Anfänger-Themen 16
M Umgebungsvariable JFileChooser#setCurrentDirectory via Properties setzen? Java Basics - Anfänger-Themen 5
P Properties speichern Java Basics - Anfänger-Themen 1
S Klasse properties - Probleme beim umwandeln Java Basics - Anfänger-Themen 3
A Properties erweitern Java Basics - Anfänger-Themen 2
G Java Properties, Downloader Java Basics - Anfänger-Themen 5
O Java Properties - Daten auslesen Java Basics - Anfänger-Themen 13
T Schlüsselworte Probleme mit den Properties Java Basics - Anfänger-Themen 7
U Radar Charts und Properties Java Basics - Anfänger-Themen 11
R Input/Output Speichern von Properties führt zu merkwürdigen "\" Java Basics - Anfänger-Themen 4
B Properties ausgeben Java Basics - Anfänger-Themen 5
B Properties oder Serializable Java Basics - Anfänger-Themen 3
S Properties-Datei schützen Java Basics - Anfänger-Themen 6
P Properties Datei auslesen? Komfortabeler? Java Basics - Anfänger-Themen 2
J Liste als Properties Java Basics - Anfänger-Themen 6
M Input/Output log4j mit properties datei Java Basics - Anfänger-Themen 6
T Vorgehen Properties Java Basics - Anfänger-Themen 4
S jcal4j/jlog4j Wo muss die Properties file rein? Java Basics - Anfänger-Themen 2
T Properties Datei gruppieren Java Basics - Anfänger-Themen 2
S Unterschied java.util.prefs / java.util.Properties Java Basics - Anfänger-Themen 3
I Problem mit Properties-Kommentare Java Basics - Anfänger-Themen 2
M Properties hinzufügen Java Basics - Anfänger-Themen 12
ruutaiokwu properties values automatisch escapen ??? Java Basics - Anfänger-Themen 3
M Properties Eintrag löschen, welcher in der JList "ausgewählt" wurde Java Basics - Anfänger-Themen 2
L Properties Reihenfolge vorgeben Java Basics - Anfänger-Themen 13
H Arbeiten mit Properties Java Basics - Anfänger-Themen 8
E Parameter aus Properties-Datei einlesen Java Basics - Anfänger-Themen 35
raptorrs Schreiben in Properties-File klappt nicht Java Basics - Anfänger-Themen 6
A log4j - wie kann ich im Quellcode initialisieren statt in der properties-Datei? Java Basics - Anfänger-Themen 2
Z Anfänger Problem mit Properties Java Basics - Anfänger-Themen 8
J Java.Util.Properties wrapper class (Review Request) Java Basics - Anfänger-Themen 2
R Properties über statischen Pfad laden Java Basics - Anfänger-Themen 2
M Erstbefüllung Properties Java Basics - Anfänger-Themen 3
L System-Properties Java Basics - Anfänger-Themen 4
Y Preferences / Properties Anwendung plattformunabhängig Java Basics - Anfänger-Themen 4
? java.util.Properties Wert von key mehrfach vorhanden Java Basics - Anfänger-Themen 13
K Convert Properties to File Java Basics - Anfänger-Themen 2
G ResourceBundle - Properties Java Basics - Anfänger-Themen 3
T Properties casten Java Basics - Anfänger-Themen 4
G Pfadangaben in properties file Java Basics - Anfänger-Themen 3
S has no properties Java Basics - Anfänger-Themen 2
M Properties Datei - einlesen Java Basics - Anfänger-Themen 18
G Properties im jar file speichern Java Basics - Anfänger-Themen 6
G Properties in jar File . Java Basics - Anfänger-Themen 2
M Variablen innerhalb der properties-datei Java Basics - Anfänger-Themen 2
B Properties erkennen, auslesen Java Basics - Anfänger-Themen 7
L Pfad per Properties schreiben lassen Java Basics - Anfänger-Themen 2
G Nutzt ihr die Methode storeToXML von Properties Java Basics - Anfänger-Themen 2
G Inhalte in einer Properties Datei setzen? Java Basics - Anfänger-Themen 14
N Properties in einen Vector Java Basics - Anfänger-Themen 6
M relative Pfadangabe beim laden von properties Datei Java Basics - Anfänger-Themen 4
G .properties lesen Java Basics - Anfänger-Themen 17
G Properties und eine Liste in einem entry key. Java Basics - Anfänger-Themen 2
V Sprache umschalten mit properties-files mit KSKB Java Basics - Anfänger-Themen 3
V Menüeinträge und ähnliches aktualisieren (aus properties) Java Basics - Anfänger-Themen 10
loadbrain Properties file einlesen Java Basics - Anfänger-Themen 2
B Properties speichern Java Basics - Anfänger-Themen 2
B Zugriff auf Properties Java Basics - Anfänger-Themen 6
R Umlaute in einer .properties-Datei Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben