Dynamisches setzen von multilingualen Strings

  • 8 Antworten
  • Letztes Antwortdatum
U

Unicate

Erfahrenes Mitglied
57
Hallo alle zusammen!

Ich bau gerade eine Datenbank in der ich verschiedene Strings speichern möchte. So ähnlich wie etwa Kochrezepte.

Jetzt sollen diese Rezepte aber auch mehrsprachig sein.
Meine erste Idee war:
Ich speicher die Rezepte etwa so: "@string/rezept_001" in der Datenbank. Dann könnte ich (so vermutete ich jedenfalls), einfach den String aus der DB ziehen und per setText meine TextView befüllen. Android würde dann die entsprechende Übersetzung laden.

Fehlanzeige, das funktioniert nicht. Als Text habe ich dann "@string/...." stehen.

Wie kann ich das Problem lösen, ohne die Strings direkt in die Datenbank zu schreiben?
 
i18n ;)
 
Mit:
...ohne die Strings direkt in die Datenbank zu schreiben...
meine ich, das ich keine Strings direkt in die Datanbank schreiben möchte.

Meine Frage war, ob es eine Möglichkeit gibt das über die
"value-??", Ordner zu machen.
 
@Tom299: Du hast offensichtlich meine Frage nicht verstanden, bzw. nicht gelesen, was ich geschrieben hatte. Wenn es so einfach wäre, dann hätte ich nicht gefragt.

Ich versuch's nochmal.


Angenommen ich habe eine Datenbank mit Lösungen für z.B. Wörterrätsel o.ä.. Die Applikation soll mehrsprachig werden und ich möchte die Mehrsprachigkeit über die Android xml's (also fällt auch direktes eintragen der Lösungen in den jeweiligen Sprachen (eine i18n-Lösung) weg) lösen.
Dann kann ich die Lösungen nicht direkt in der Datenbank speichern. (Da ich die übersetzten Wörter aus der xml holen will).

Was muss ich nun in die Datenbank schreiben, um in der App zur Laufzeit an die entsprechende Übersetzung zu kommen?
Wie bereits erwähnt, habe ich es mit "@string/mein_wort" (Also in der entsprechenden Tabelle in meiner DB steht dieser tatsächlich "@string/mein_wort") versucht, was aber nicht funktioniert.

Mit Reflections würde das evtl. noch gehen, find ich aber nicht so schön.

Code:
            Field field = R.string.class.getField("mein_wort");
            String translatedString = getString(field.getInt(null));
Deswegen suche ich nach einer anderen Möglichkeit
 
Zuletzt bearbeitet:
Hmmm mit getResources().getString(id) kann man ja auf eine String-Resource zugreifen. Allerdings weiß ich nicht, wie das bei localization funktioniert, ob die resourceID dann für alle Sprachen gilt oder nicht. Wenn ja, könntest du diese id halt in der DB speichern.

Aber ich denke, wenn ich die Wahl hätte, würd ich mir in der DB eine Mapping-Tabelle anlegen und alles über die DB machen.
 
Naja die Resource ID speichern ist auch nicht so gut, denn dann müsste ich jedesmal beim neu generieren der Stringklasse(R.string) meine DB neu bauen. Und Ja, die Resource ID gilt für alle Sprachen.

Bevor ich Anfange die Strings in meiner DB zu mappen und je nach Sprache anzulegen, verwende ich lieber Reflections. (Sonst müsste ich bevor ich einen Request mache, jedesmal nach der aktuell eingestellten Sprache fragen und je nach Einstellung dann den entsprechenden String laden)
 
Anlegen mußt du die Strings eh, ob in der DB oder im XML ist ja egal. Und wenn du deine App startest kennst du auch die eingestellte Sprache, also mußt du diese nicht jedes Mal abfragen. Und wenn du die Lösung aus der DB abfragen mußt, dann ist es ja kein Problem, mal eben noch die Übersetzung mit auszulesen ...
 
Die Einfachheit der Erweiterung lässt mich hier trotzdem für die Lösung mit den Reflections entscheiden.
Im Moment habe ich nur die englischen Texte. Bei einer Übersetzung muss ich lediglich die xml kopieren und abändern.
 
Zurück
Oben Unten