hallo leute
habt ihr ne idee wie ich den country code ermitteln kann ? ich möchte meine daten abfragen bei deutsch in deutsch sonst die englischen daten aus einer datenbank.
hallo leute
habt ihr ne idee wie ich den country code ermitteln kann ? ich möchte meine daten abfragen bei deutsch in deutsch sonst die englischen daten aus einer datenbank.
http://developer.android.com/reference/java/util/Locale.html
ISO3 Standard:
Wenn du selbst die Sprache innerhalb der App setzt bzw. manipulierst, kannst du über:
bzw.
gehen.
Hier hast du die Möglichkeit über Locale.setDefault("de"); die Standardsprache zu ändern. Diese wird dann auch anstelle der Eingestellten Systemsprache ausgegeben.
Also mit dem getResources() und dem Locale hatte ich ziemlich oft irgendwelche Probleme.
Ist allerdings schon so lange her, dass ich gar nicht mehr weiß, welche Probleme das waren.
Ich habe mir damit geholfen, dass ich in den jeweiligen values eine String.xml habe, die mindestens eine ID 'languageIdentifier' beinhaltet.
Wenn ich also nur englisch und deutsch angelegt habe, bekomme ich auch nur englisch oder deutsch zurück.
Stelle ich mein Gerät auf Finnisch, dann werden die Daten aus der englischen values gezogen.
Mit anderen Worten: nicht ich unterscheide an Hand irgendwelcher Locales, welche Sprache ich laden muss. Ich überlasse diesen ganzen Kram dem System.
Wäre ideal wenn du dich noch dran erinnern könntest, welche Probleme du damit hattest Über der Configuration gibt es eig. keine Probleme und bei Locale eig. auch nicht vorausgesetzt man weiß, dass man auch andere Werte bei "Locale.getLocale().getLanguage()" bekommt, wenn man irgendwo selbst die Sprache gesetzt hat "Locale.setDefault("de")". Nicht das du damit ggf. Probleme hattest xD
In meinen Projekten verwende ich recht häufig die eingestellte Sprache, wenn das Fehlerbehaftet wäre, wären auch meine Statistiken die ich damit aufbaue sinnfrei. Also denk nach und sag an wo das Problem lag / liegt ;D
Ich denke mein Problem war, dass ich immer nur an die kompletten Informationen wie 'en_EN', 'English' etc. bekommen habe, aber nur 'en' haben wollte.
Mag sein, dass ich da ein getLanguage() vergessen hatte...
Wie dem auch sei, ich wollte keine fehlerhaften Datenbankabfragen, weil beispielsweise 'fr_FR' heraus kommt, ich Französisch aber nicht als Sprache habe.
Als ich anfing daran herumzudoktorn und das dann noch in drei Dateien machen musste, habe ich mich für die values-Variante entschieden und mag sie im aktuellen Projekt auch überhaupt nicht umbauen.
Es waren also keine Absturz- oder Implementierungsprobleme, eher Aufwand-Nutzen-Verhältnisprobleme.
wobei ich sagen muss, dass mir die values variante besser gefällt!
android unterscheidet von sich aus welche sprache es in der app benutzt, wenn man mehrere sprachen einsetzt.
warum also in der string.xml nicht einfach für das jeweilige land einen string definieren und dann bei der datenbank abfrage auf diesen string prüfen.
das macht nicht wirklich mehr aufwand und nutzt gleich das android eigene unterscheidungssystem
Wieso direkt prüfen? Ich würd den String aus der values.xml direkt in die Where Clausel einfügen
solang du das mit dem xml machst geht das, da hast du recht.
hallo leute
vielen dank für eure ideen, aber mein problem ist doch etwas wilder. ich habe eine datenbank mit einigen deutschen und einigen englischen inhalten. nun möchte ich für diejenigen die ihr gerät auf deutsch gesetzt haben alle deutschen inhalte auslesen und auch nur die deutschen texte ändern können. alles anderen sollen die englischen daten lesen und ändern dürfen.
das heisst aber auch das meine layout-datei auf if .. then reagieren muss. im java code kann ich if and then einbauen (hab einfach in der string-datei ein sprache string auf de bzw en gesetzt) und frag den string ab. wie änder ich aber die layout datei ?
habt ihr ne idee ?
es geht doch nur darum das du in einer text xml einen ländercode angibst den du auch in der db vergeben hast
bsp.:
du schreibst in die deutsche string.xml
<string name="language">de</string>
und in die englische
<string name="language">en</string>
dann fügst du in der db eine spalte ein, und schreibst bei jedem text den ländercode rein
dann fragst du im java code den ländercode ab String xmlLanguage = getRessource().getString("language")
(die syntax könnte falsch sein das hab ich gerade nur ausm kopf gemacht :<)
dann kannst du ganz einfach aus der sql abfragen
where dbLanguage=xmlLanguage
dann fragst du im java code den ländercode ab String xmlLanguage = getRessource().getString("language")
(die syntax könnte falsch sein das hab ich gerade nur ausm kopf gemacht :<)
Fast korrekt
Zur Auswahl stehen:
getRessource(). +
getString(int id)
getString(int id, Object... formatArgs)
getStringArray(int id)
hallo leute
klingt soweit gut -aber ich habe in der datenbank in jeder zeile ein paar deutsche und ein paar englische texte - 2 datenbanken bzw eine geteilte auf deutsch/englisch würde zu gross werden - ich hab hier knapp 3000 einträge wo einige spalten irre viel text beinhalten
ich wollt eigentlich dahin, das ich den ländercode oder string abfrag und dann entscheide (if string.... equals "de" dann spalte 1,2,3 sonst spalte 4,5,6) oder so. die datenbank muss ich alle 2 jahre neu aufnehmen und brauch dann wenn ich die original-struktur behalte nur wenige prüfungen durcharbeiten.
also ich kopier die deutsche datenbank komplett und änder dann den englischen part
Du brauchst dafür doch auch nicht zwei Datenbanken. Wenn du in einer Spalte den Lang-Code hast und diesen z.b in deiner Query einbaust passt doch alles:
hallo drumliner
ich versteh schon was du meinst - nur jede zeile ist deutsch englisch
bei dem hilfepart ist das ok - da habe ich zeilenweise mal deutsch mal englisch - da gehts
Na dann holst dir halt die Daten mit der gewählten ID raus und nutzt davon je nach Spracheinstellung die Zeile (langde bzw langen) und weißt diese dem Objekt beim erzeugen zu.
Wie du unterscheiden kannst haben wir dir ja bereits auf 3 verschiedenen Arten mitgeteilt.
also - ich bin nicht so ein crack wie ihr - bin noch sehr sehr neu in android sprich java - beschimpft mich ruhig aber folgendes problem hab ich
ich hab jetzt meine xml dateien ungeschrieben auf nur "lashing" view_datensatz.xml
<TextView
style="@style/StyleLabel"
android:layout_gravity="left"
android:gravity="left"
android:text="@string/lashinglbl" />
<TextView
android:id="@+id/lashingText"
style="@style/StyleText" />
in der strngs.xml habe ich
<string name="sprache">de</string>
in meiner tabelle sind aber einmal lashing_d und lashing_e felder
in der view unter java siehts dann so aus
private void setUpViews() {
lashingTv = (TextView) findViewById(R.id.lashingText);
}
wie mach ich dem das klar das bei deutsch der wert lashing_d bzw englisch lashing_e reinkommt
ihr müsst entschuldigen - für euch ist das was gängiges - für mich ein richtiges problem - ich brauch noch jahre um da reinzukommen
Du brauchst nur beim Laden die von dir benötigte Sprache in deinem Objekt setzen. Danach kannst du dein Objekt ja einfach verwenden und dein TextView setzen.
Da du ja nun die Variante über XML verwendest hier ein Beispiel hierfür:
String sprache = getResources().getString(R.id.sprache);
if(sprache.equals("de")){
myObject.setLocalizedDescription(cursor.getString(cursor.getColumnIndex(LANGUAGE_DE)));
} else {
myObject.setLocalizedDescription(cursor.getString(cursor.getColumnIndex(LANGUAGE_EN)));
}
Nach dem laden setzt du nun ganz einfach dein TextView:
ich raff das nicht
was ist denn nun schon wieder myObject ?
LANGUAGE_DE wird wohl lashing_d sein und LANGUAGE_EN lashing_e
selbst wenn nach etlichen diverse versuchen der code fehlerfrei ist startet der view_datensatz nicht - bis zur listview läufts aber.
kann ich denn wenn ich alles lade - wie es jetzt der fall ist, die nichtbenötigten daten - also bei deutsch alle englischen texte ausblenden ?
myObject repräsentiert hier eine Instanz deines Objektes. Hier mal als Beispiel:
public class MyObject {
private long id;
private String localizedDescription;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getLocalizedDescription() {
return localizedDescription;
}
public void setLocalizedDescription(String localizedDescription) {
this.localizedDescription = localizedDescription;
}
}
Alles anzeigen
Du kannst nun beim laden deiner Daten im DatabaseHelper eine neue Instanz mit den Werten erzeugen. Diese kannst du dann Problemlos verwenden.
LANGUAGE_DE repräsentiert eine Spalte deiner Datenbank, nämlich genau die die deine Beschreibung für die Deutsche Sprache beinhaltet. (lashing_d)
Zitat
kann ich denn wenn ich alles lade - wie es jetzt der fall ist, die nichtbenötigten daten - also bei deutsch alle englischen texte ausblenden ?
Kannst du, brauchst du in dem Beispiel aber gar nicht, da du nur auf deinem Objekt (myObject) die Methode getLocalizedDescription() aufrufen brauchst. Da du die Werte dort gespeichert hast steht dir also damit genau die benötigte Übersetzung in dem Objekt zur Verfügung.
Solltest du noch Probleme beim Verständnis haben, lad doch einfach mal dein Projekt auf einen externem Hoster hoch.
nochmals danke für deine geduld
ich üb noch noch ne weile - problem beim verständnis ist gut - im moment seh ich nichts - werd mal im databasehelper rumdoktorn - das myObject ist doch dann meine "ViewDatensatz.java" klasse oder nicht
was meinst du mit externem hoster hochladen ?
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!