country code ermitteln

  • http://developer.android.com/reference/java/util/Locale.html


    Java
    getResources().getConfiguration().locale.getLanguage()


    ISO3 Standard:


    Java
    getResources().getConfiguration().locale.getISO3Language()



    Wenn du selbst die Sprache innerhalb der App setzt bzw. manipulierst, kannst du über:


    Java
    Locale.getLocale().getLanguage()


    bzw.


    Java
    Locale.getLocale().getISO3Language()


    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.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • 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. :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • 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

  • 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:



    Java
    String where = "languagecode = " + langCode;
    
    
    Cursor cursor = database.query(MySQLiteHelper.MYINCREDIBLETABLE,
            allColumns, where, null, null, null, null);
  • 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:


    Java
    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:


    Java
    lashingTv.setText(myObject.getLocalizedDescription());
  • 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:




    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 ?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!