Saubere Lösung für das Auslesen einer Html Seite (Mehrsprachigkeit)

Websphere

Mitglied
Moin,

Theorie: Ich lese eine Html Seite aus. Die Seite unterstützt mehrere Sprachen, somit finde ich folgende Inhalte, da jeder User der Seite sein Profil auf seine Sprache anpassen kann:

Englischer User:
firstName
lastName
sex
birth
...

Deutscher User:
vorname
nachname
geschlecht
geburtsdatum
...

Spanisch
Italienisch
usw.

Hier kommen eine ganze Latte an Informationen für den User dazu, der Aufbau ist bei allen gleich. Nun könnte ich das natürlich für jede Sprache runterschreiben, was natürlich jede Menge Zeilen produziert (natürlich jede Sprache in eine eigene Klasse, damit das übersichtlicher ist). Der Nachteil, wenn sich was ändert muss ich das in jeder Klasse ändern.

Schöner wäre es doch, man arbeitet mit einer properties Datei und schreibt das Ganze nur einmal.
Code Aktuell:
Java:
// String lang enthealt die jeweilige Sprache
// int lcode ist fuer die Switch Anweisung
...
if (lang.equals("German(2)")) {
  lcode = 1;
  System.out.println(" ------- LANGUAGE: " + lang);
}
else if (lang.equals("English(1)")) {
  lcode = 2;
  System.out.println(" ------- LANGUAGE: " + lang);
}
...
switch (lcode) {
                
  // GERMAN
  case 1: {
  if (row.asText().trim().equalsIgnoreCase("vorname")) {
    machwas...
  }
  else if (row.asText().trim().equalsIgnoreCase("nachname")) {
    machwas...
  }
  ...

 case 2: {
   if (row.asText().trim().equalsIgnoreCase("firstName")) {
    machwas...
  }
  else if (row.asText().trim().equalsIgnoreCase("lastName")) {
    machwas...
  }
  ...

Ich finde das nicht gerade proessionell, deswegen würde ich das eine properties erledigen lassen. Die habe ich auch schon geschrieben. Nun die Frage wie binde ich die ein?
In der case Anweisung müsste eigentlich auf die properties Datei verwiesen werden. Also für case 1 - nimm propertiesENG, für case 2 - propertiesDEU ... usw.
Code Theorie:
[Java]

propertiesDEU Beispiel
name=vorname
lname=nachname
ges=geschlecht
geb=geburtsdatum
...

propertiesENG Beispiel
name=firstName
lname=lastname
ges=sex
geb=birth
...

switch (lcode) {

if (lang.equals("German(2)")) {
// Pseudo Code
nimm propertiesDEU;
System.out.println(" ------- LANGUAGE: " + lang);
}
else if (lang.equals("English(1)")) {
// Pseudo Code
nimm propertiesENG;
System.out.println(" ------- LANGUAGE: " + lang);
}
...

// All Languages, Pseudo Code
if (row.asText().trim().equalsIgnoreCase("aame_InDerProperties")) {
machwas...
}
else if (row.asText().trim().equalsIgnoreCase("nachname_InDerProperties")) {
machwas...
}
...

[/code]
Soweit ich weiß brauche ich ein Objekt der Klasse RessourceBundle (Link Galileo Open Book Java Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 13.4 Internationalisierung und Lokalisierung). SO ganz hinbekommen tue ich es leider nicht, wäre deswegen schön wenn mir da jemand helfen könnte.

Danke im Voraus
 

Websphere

Mitglied
Zwei Bitten noch:

1. Ich habe mich gerade angemeldet, kann man mich also dem Thread zuweisen den ich oben erstellt habe?

2. Wenn man das nicht versteht oder was fehlt, dann sagt es bitte.
 

TR

Aktives Mitglied
Vielleicht wird es damit verständlicher.

im src-Verzeichnis habe ich ein Verzeichnis "resources" angelegt.
In diesem Verzeichnis gibt es folgende Dateien:
locals.properties
locals_en.properties

in der locals.properties steht folgender Inhalt:
Code:
firstname=Vorname
lastname=Nachname

in der locals_en.properties folgendes:
Code:
firstname=Firstname
lastname=Lastname

Also es gibt nur für Englisch (en) eine Übersetzung, alles andere geht auf default, in diesem Fall deutscher Text!


Java:
import java.util.Locale;
import java.util.ResourceBundle;

public class Test {

    /**
     * Im Verzeichnis Resource gibt es die Properties-Datei locals
     * locals.properties ist die std. Übersetzung wenn es für eine Sprache xy keine übersetzung gibt
     * locals_de.properties ist die übersetzung für Deutsch
     * locals_en.properties ist die übersetzung für Englisch
     * etc...
     */
    final static private String BASENAME = "resources.locals"; 
    
    final private ResourceBundle _bundle;
    
    
    public Test(String language) {
        
        Locale locale = null;
        
        if (language.equals("German(2)")){
            locale = new Locale("de"); // Wobei deutsch ja schon default ist!
        }else if (language.endsWith("English(1)")){
            locale = new Locale("en");
        }else{
            locale = Locale.getDefault();
        }
        
        this._bundle = ResourceBundle.getBundle(BASENAME, locale); 
        
    }

    /**
     * Übersetzung holen
     * @param key
     * @return
     */
    final public String getString(String key){
        return this._bundle.getString(key);
    }
    
    public static void main(String[] args) {

        Test test = new Test("English(1)");
        System.out.println(test.getString("firstname"));
        System.out.println(test.getString("lastname"));
        
        test = new Test("German(2)");
        System.out.println(test.getString("firstname"));
        System.out.println(test.getString("lastname"));
        
    }

}
 
S

SlaterB

Gast
du musst die Properties nehmen, korrekt, was ist die Frage?
dein Code ist so allgemein das kaum was offen erscheint

mach es z.B. so
Java:
String propertyFilename = null;
if (lang.equals("German(2)")) {
  propertyFilename = "propertiesDEU";
}
else if (lang.equals("English(1)")) {
 propertyFilename = "propertiesENG";
}
System.out.println(" ------- LANGUAGE: " + propertyFilename );
Properties p = loadProperties(propertyFilename );

String key = row.asText().trim();
String val = p.loadTextToKey(key); // hier gleich alle IgnoreCase bearbeiten, 
           // z.B. immer alles toLowerCase()
if (val == null) {
  // unbekannter Key
} else if (r.equalsIgnoreCase("aame_InDerProperties")) {
   xy.setAame(val);    
} else if (r.equalsIgnoreCase("nachname_InDerProperties")) {
   xy.setNachname(val);    
}
 

Websphere

Mitglied
Danke, ich werde das nachher gleich mal ausprobieren.

@TR: war auf Arbeit und etwas im Stress, deswegen war die Beschreibung etwas durcheinander. Danke fürs Aufbereiten.

Die Frage war/ist: Wie verweise ich auf die propertie bzw. auf deren Inhalt, wenn ich den Inhalt einer Website ausgelesen habe und mit der propertie vergleichen möchte?
Beispiel der Tabelle:
Java:
eng. Spieler:
First Name = Jude
Last Name = Law
....


deut. Spieler:
Name = Mario
Nachname = Adorf
...
Damit ich die Namen bekomme, brauche ich den Datensatz davor. Damit er die jeweilige Sprache kennt, werden diese in der properties definiert. Diese habe ich meinem ersten Post schon aufgeführt.

Zum unvollständigen Code:
Java:
DomNodeList<HtmlElement> list = page.getElementsByTagName("table");
	for (Iterator i = list.iterator(); i.hasNext();) {
		HtmlTable table = (HtmlTable) i.next();
		for (final HtmlTableRow row : table.getRows()) {
			for (final HtmlTableCell cell : row.getCells()) {
				
				if (cell.asText().trim().equalsIgnoreCase("Language")) {
					if (cell.getNextSibling() != null){
						List<DomNode> childs = row.getNextSibling().getChildNodes();
							lang = childs.get(1).asText();
							if (lang.equals("German")) {
								propertyFilename = "propertiesDEU";
							}
							else if (lang.equals("English")) {
								propertyFilename = "propertiesENG";
							}
							System.out.println("LANGUAGE: " + propertyFilename );
							Properties p = loadProperties(propertyFilename );	
					}
				}
			}

			String key = row.asText().trim();
			String val = p.loadTextToKey(key); // hier gleich alle IgnoreCase bearbeiten, 
			//z.B. immer alles toLowerCase()
			if (val == null) {
				// unbekannter Key
			} else if (val.equalsIgnoreCase(" was muss hier hin? ")) {
				xy.setName(val);    
			} else if (val.equalsIgnoreCase(" was muss hier hin? ")) {
				xy.setNachname(val);    
			}
...

@SlaterB: das was du geschrieben hast ist mir so ziemlich alles logisch. Nur den letzten Teil verstehe ich nicht, also die letzte if.
Beispiel:
Ich lese englische Informationen aus. Über Language kenne ich die verwendete Sprache der Tabelle.
val erhält somit den Inhalt "firstname". Damit er das kennt, braucht er nun den verweis auf die propertiesENG, in der iwo "name=First Name" steht.
Btw wie definiere ich den Pfad der properties? So wie es TR geschrieben hat?
Also wie verweise ich auf die properties?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
K Saubere Verwendung von Generic Types Allgemeine Java-Themen 7
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
temi Lösung zum Speichern von Deltafiles Allgemeine Java-Themen 6
M Hamstersimulator- lösung Allgemeine Java-Themen 3
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
E Methoden Hat jemand eine gute Lösung? Allgemeine Java-Themen 5
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
N Static oder andere Lösung Allgemeine Java-Themen 5
TheWhiteShadow Reflection-Lösung für Objektkopien Allgemeine Java-Themen 3
B Datentypen wav Dateien abspielen mit JMF, Clip und Player klappt nicht. Lösung Codec? Allgemeine Java-Themen 13
J [SWING]Elegante Java Formular Lösung? XML? Allgemeine Java-Themen 4
Private Void rekursive vs. iterative Lösung für Berechnung der Fakultät Allgemeine Java-Themen 12
D Lösung Differentialgl. mit RungeKutta + Kurve zeichnen Allgemeine Java-Themen 3
S große CSV-Dateien Importieren. Beste Lösung ?! AWS,S3,Hadoop!? Allgemeine Java-Themen 4
J Welche Lösung für Servlets und JSPs in Eclipse? Allgemeine Java-Themen 5
hdi Häufige Fehler und deren Lösung Allgemeine Java-Themen 4
G Speichern von Dateien - Lösung bei JNLP? Allgemeine Java-Themen 8
V [Lösung]Hohe Systemauslastung bei JFileChooser auf WindowsXP Allgemeine Java-Themen 5
T Ist IAdaptable die richtige Lösung? Allgemeine Java-Themen 4
T Unbekannte Fehlermeldung + Lösung? Allgemeine Java-Themen 4
K Elegante Lösung zum Manipulieren von Collections gesucht Allgemeine Java-Themen 16
S Problem! Lösung mit Double buffering Allgemeine Java-Themen 3
H if - else if-else bessere Lösung gesucht Allgemeine Java-Themen 4
B Elegantere Lösung bei der Implementierung eines Interfaces Allgemeine Java-Themen 2
V Lösung mit iText gesucht. Allgemeine Java-Themen 2
G Was wäre am einfachsten bzw. die beste Lösung? Allgemeine Java-Themen 6
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G KeyListener für JTextField Allgemeine Java-Themen 5
webracer999 Library für Textsuche (z. B. include/exclude, and/or)? Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
B Simpler Eventlistener für Tastaturtaste bauen? Allgemeine Java-Themen 13
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
rosima26 Bester Sortieralgorithmus für kurze Arrays Allgemeine Java-Themen 40
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
B Lottospiel, genug Reihen tippen für 3 Richtige (Spaß mit Arrays)? Allgemeine Java-Themen 46
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
D Klassendesign für einen Pascal Interpreter Allgemeine Java-Themen 6
I OCR Library für Belegerkennung Allgemeine Java-Themen 7
farah GetterMathod für Farbkanäle Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
S Webservices für binäre Daten? Allgemeine Java-Themen 5
G Licence-Header für InHouse entwickelten Source Allgemeine Java-Themen 8
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
F Java Script für das Vorhaben das richtige? Allgemeine Java-Themen 9
M wiviel Java muss ich für die Berufswelt können ? Allgemeine Java-Themen 5
Robertop Datumsformat für GB ab Java 16 Allgemeine Java-Themen 1
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
OnDemand Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
D SHA-3 für Java-version 1.8 Allgemeine Java-Themen 1
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
B Logikfehlersuche, das perfekte Lottosystem für 3 Richtige mit Arraylists? Allgemeine Java-Themen 61
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
M API für PLZ Umkreissuche Allgemeine Java-Themen 3
1Spinne JDK 8 für Eclipse installieren Allgemeine Java-Themen 5
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
L Methoden Parser für gängige Datumsformate? Allgemeine Java-Themen 1
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
buchfrau Anagram für beliebiges Wort Allgemeine Java-Themen 2
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
Kirby.exe Distanz Map für die Distanztransformation erstellen Allgemeine Java-Themen 1
F PI Regler für Heizung Allgemeine Java-Themen 7
8u3631984 Generelle Log4j.xml für alle Module Allgemeine Java-Themen 5
M Wie übergebe ich den Zähler für die Anzahl Rekursionsschritte korrekt? Allgemeine Java-Themen 2
B Login für User, der im Hintergrund Schedules ausführt Allgemeine Java-Themen 16
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
S Java-Task-Management-Tool für Windows und Mac selber programmieren Allgemeine Java-Themen 4
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
Z Welches GUI Framework für Java ist aktuell? Allgemeine Java-Themen 16
N Convert.FromBase64 von C# für Java Allgemeine Java-Themen 11
N fixed-keyword von C# für Java Allgemeine Java-Themen 6
O Suche Scripter für alt:V Project! Allgemeine Java-Themen 0
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
O Suche Unterstützung für ein OpenSource-Projekt (grafischer Editor) Allgemeine Java-Themen 13
Kirby.exe Software für Graphische Visualisierung Allgemeine Java-Themen 20
B OOP Auslöser für NullPointerException Allgemeine Java-Themen 3
L Generator für einen Parser implementieren Allgemeine Java-Themen 13
DonMalte Ambitioniertes Projekt für Einsteiger & Motivierte Allgemeine Java-Themen 0
Kirby.exe Movement System für Spiel Allgemeine Java-Themen 13
Kirby.exe Framework für Game Design Allgemeine Java-Themen 8
W Alternative für Threads Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
Elyt Compiler-Fehler Datei kann nicht erstellt werden. Die Syntax für den Dateinamen etc. ist falsch. Allgemeine Java-Themen 2
Thallius Rätsel für Windows Profis Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben